1. 程式人生 > >微信公眾號授權---第三方平臺(php)

微信公眾號授權---第三方平臺(php)

用過微擎、微贊、微動力等第三方公眾號管理平臺的人都知道,需要在這些平臺中接入公眾號(就是授權給第三方平臺),為了瞭解探究微擎中掃碼授權的機制,看了微信開放平臺中的第三方平臺開發,並做了例項,寫下此文紀念我這一天遇到的坑!!!

公眾平臺第三方平臺是為了讓公眾號或小程式運營者,在面向垂直行業需求時,可以一鍵授權給第三方平臺(並且可以同時授權給多家第三方),通過第三方平臺來完成業務

第一個注意點:申請的時候有一個校驗檔案,需要放到根目錄
這裡寫圖片描述

第三個注意點:訊息校驗Token和訊息加解密Key 可以自己填寫,不需要糾結去哪獲取

第四個注意點:測試授權的時候一定要用填寫的 授權測試公眾號 ,用其他的公眾號也會報錯

本文適合小白、或初探第三方平臺的人看,大神請不要吐槽~此文主要寫授權流程

我們小小碼農初看官方文件肯定會有懵逼的感覺,雲裡霧裡,官方文件說的不太明白。

官網步驟一:要先獲取什麼pre_auth_code,但是獲取pre_auth_code需要先獲取component_access_token,而獲取component_access_token需要先拿到component_verify_ticket…

這個關係略坑,按照程式碼順序來說其實是如下這樣的:
component_verify_ticket->component_access_token->pre_auth_code

然後才能引入使用者進入授權頁,即掃碼將公眾號的介面許可權賦於第三方平臺。

最坑的一點就是獲取component_verify_ticket,需要用加密協議…這一點讓我迷惑了好幾個小時…還是通過百度之後才得以解決,獲得了這個ticket。

我分了四個檔案來寫授權,以下是示例程式碼

1.第一個檔案accept.php獲取component_verify_ticket:(此檔案需要和官方下載的php資料夾內的加解密檔案放一起,微信伺服器推送ticket的時候會生成ticket.log檔案
這裡寫圖片描述
在此要感謝這篇文章:http://blog.csdn.net/heysteria/article/details/50041163

accept.php:

define('LOGPATH', dirname(__FILE__));
include_once "wxBizMsgCrypt.php";

//以下三個變數,自己去開放平臺上管理中心根據實際情況填寫。
$encodingAesKey = '自己填寫的訊息加解密Key '; 
$token = '自己填寫的訊息校驗Token';
$appId = '自己的appid';

$timeStamp  = empty($_GET['timestamp'])     ? ""    : trim($_GET['timestamp']) ;
$nonce      = empty($_GET['nonce'])     ? ""    : trim($_GET['nonce']) ;
$msg_sign   = empty($_GET['msg_signature']) ? ""    : trim($_GET['msg_signature']) ;
$encryptMsg = file_get_contents('php://input');
$pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);

$xml_tree = new DOMDocument();
$xml_tree->loadXML($encryptMsg);
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$encrypt = $array_e->item(0)->nodeValue;


$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $encrypt);
logResult('/form.log', $from_xml);
// 第三方收到公眾號平臺傳送的訊息
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
if ($errCode == 0) {
    //print("解密後: " . $msg . "\n");
    $xml = new DOMDocument();
    $xml->loadXML($msg);
    $array_e = $xml->getElementsByTagName('ComponentVerifyTicket');
    $component_verify_ticket = $array_e->item(0)->nodeValue;
    file_put_contents(LOGPATH.'/ticket.log', $component_verify_ticket);
    logResult('/msgmsg.log','解密後的component_verify_ticket是:'.$component_verify_ticket);

    echo 'success';

} else {
    logResult('/error.log','解密後失敗:'.$errCode);
    print($errCode . "\n");
}
function logResult($path,$data){
    file_put_contents(LOGPATH.$path, '['.date('Y-m-d : h:i:sa',time()).']'.$data."\r\n",FILE_APPEND);
}
die(); 

2.通過第一步就可以獲取到component_verify_ticket了(從ticket.log中拿到),然後獲取component_access_token

/**
 * http/https請求函式
 */
function https_request($url,$data=null){
        $curl = curl_init();
        curl_setopt($curl,CURLOPT_URL,$url);
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
        if(!empty($data)){
            curl_setopt($curl,CURLOPT_POST,1);
            curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
        }
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
$url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
$data = array(
            "component_appid"=>"你的appid",
            "component_appsecret"=>"你的appsecret",
            "component_verify_ticket"=>"SPt1dEQx-QFn5MAXQ4zVmM1w1QBRlKGSHHnd6ebMCzJx21A_0RPaUHCovYNJUR6z-iYM-1c_asp0m1zoheT99g"
        );
$send_result = https_request($url, json_encode($data));
$send_result = json_decode($send_result,true);
var_dump($send_result);

3.通過上一步拿到component_access_token,換取pre_auth_code

$token = "6_36ssst_zdzZ8sxcBn6P_-OiyM-dOVfrgBf2kEG4PCJyMu0oiMACiRXGn_zhq13j1QuXWCdL3EdTdGJb4-MTJAFTcsedQkU4Ghi7pyS5410tElXsc9vhq5D18xHDgF2t2G93o8bL-l05xVHFHAXdAGAMFC";

$url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token={$token}";
$data = array(
            "component_appid"=>"你的appid"
        );
$send_result = https_request($url, json_encode($data));
$send_result = json_decode($send_result,true);
var_dump($send_result);

4.通過第三步就可以獲取到pre_auth_code了,然後就能授權啦

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>授權測試頁</title>
</head>
<body>

<a href="https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=wxd8f2bd0718eb0143&[email protected]@@3RFasdaRgPvceKww4LvN4655IvvBXu7ZsqkMjb9VX7AP-0hsujUEMGO7k1yBlw3F&redirect_uri=http%3A%2F%2Fwww.10088.cn" id="authurl" style="display: inline;">
<img src="https://open.weixin.qq.com/zh_CN/htmledition/res/assets/res-design-download/icon_button3_1.png">
</a>


</body>
</html>    

效果如下:
這裡寫圖片描述

點選就可以授權啦!

授權失敗記的看一下上面我說的注意點!!!

相關推薦

公眾授權---第三方平臺php

用過微擎、微贊、微動力等第三方公眾號管理平臺的人都知道,需要在這些平臺中接入公眾號(就是授權給第三方平臺),為了瞭解探究微擎中掃碼授權的機制,看了微信開放平臺中的第三方平臺開發,並做了例項,寫下此文紀念我這一天遇到的坑!!! 公眾平臺第三方平臺是為了讓公

公眾對接第三方平臺全網釋出 java

目錄 目錄 背景 第三方平臺 程式碼開發 結束語 背景   由於平臺對接的使用者不斷增加,微信會進行一個檢測。如果你對接的微信公眾平臺多次使用同一個地址進行開發者對接。那麼它會認為你這個網站存在風險-官方解釋,或者你對接微信公眾號平臺

公眾授權登入一laravel

namespace App\Http\Controllers; use Illuminate\Http\Request; use Validator; use Session; use App\Http\Requests; use App\Http\Controller

公眾支付掃碼PHP

基本思路: 1、使用者掃碼進入我們的系統頁面(自己定義的一個使用者輸入金額的頁面)       通過獲取CODE然後獲取openid 2、使用者輸完金額後,點選支付按鈕,進入統一支付介面   &nbs

公眾接入第三方平臺客服系統的操作步驟:

最近看到有人抱怨公眾號後臺的客服功能太爛,使用者來了只能通過網頁視窗交流,一個使用者一個視窗,有新訊息也不提醒,需要不斷的重新整理,嚴重影響了客服的工作效率。其實大可不必這麼麻煩,只需要在公眾號接入一套第三方的客服系統就完全可以搞定,而且它還不止這些功能哦!   那麼該如何接入第三方客服系統呢?

公眾對接第三方平臺開發

前言         微信公眾號對接第三方開發的前提就是授權。首先是開通開放平臺。開通時填寫資料包括公司資訊,還需要300大洋。開放平臺包括移動應用、網站應用、公眾號賬號、小程式、第三方平臺。這裡我們開通第三方平臺。       &nb

公眾支付開發手記node

微信支付 前言 總結一下最近業務開發中對微信公眾號支付的開發過程,微信支付的開發前提是已經具備可上線微信公眾號開發的基礎上進行的,如果你的開發階段目前停留在起步,建議參考這篇文章開始。 好了,來聊一聊微信支付。不論是今天的分享,還是網上其他的分享,開頭總是在吐槽微信的文件。我也不例外,剛開始總是覺得文件

php公眾模版訊息傳送群發

public function sendall(){ $all_openid=$this->tosendall(); foreach($all_openid as $value){ $this->set_msg($value); } } publ

C#公眾全攻略3--接管所有訊息驗證部分 C#程式碼

新建網站 新建一般處理程式 怎麼操作SQL資料庫不寫了 只發一些關鍵部分程式碼 一般處理程式關鍵程式碼 public class Interface : IHttpHandler { public stati

C#公眾全攻略5--群發訊息時的openid對應的使用者是誰呢

有一個openid不屬於公眾號關注使用者的任何一位 在通過微信控制檯群發訊息後 將有一個Event為MASSSENDJOBFINISH的事件推送 對應的openid 他是誰呢 他的nickname是張三瘋 來自 中國 廣東 廣州 簽名是DayDayUpUp

C#公眾全攻略4--實現回覆訊息C#程式碼

接上文 這個函式把使用者發來的內容交接給messageHelp來處理 最後返回messageHelp.ReturnMessage private void Handle(string postStr) { messageHelp help = new

公眾java開發沉澱推送群發訊息

許可權 只有認證的的訂閱號 和 服務號,可以群發訊息。自己申請的測試號,或者沒認證的訂閱號、服務號,沒有許可權。 樣子 發出去的文字訊息、圖片訊息等於普通訊息無差,我就不多說了。傳送出去的圖文訊息是這樣子的。 者其實是兩條圖文訊息,上面的真好是第一條,下面

公眾java開發沉澱獲取使用者資訊

​ 關注公眾號後,公眾號可獲得關注者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。對於不同公眾號,同一使用者的openid不同)。公眾號可通過OpenID獲取使用者基本資訊,包括暱稱、頭像、性別、所在城市、語言和關注時間。 ​

公眾開發完整教程 PHP7.0版本,TP5.0框架

因為工作的需要,這一兩年對微信公眾號和小程式,專案製作的比較多。所以我才打算寫一篇全面的製作教程,當然了,最好的教程是微信工作平臺的文件。我這裡只是講述一下我的工作中的製作流程。所有相關文章的原始碼,我託管在我自己的github上面,歡迎關注:地址點選開啟連結。接下來開始我們

普通js使用ajax,公眾授權網頁授權

微信授權的整個流程: 引導使用者進入授權頁面同意授權,獲取code 通過code換取網頁授權access_token(與基礎支援中的access_token不同) 如果需要,開發者可以重新整理網頁授權access_token,避免過期 通過網頁授權access_tok

vue腳手架,公眾授權網頁授權

如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。 首先我做了一個H5小專案,然後申請公眾號,然後在【自定義選單】中輸入想填寫的,公眾號選單名稱,以及頁面地址: 然後,我們在我們的前端頁面寫呼叫伺服器介面,得到授權。當然

服務第三方平臺對接前端

微信公眾號: 1、服務號(每個月只能推送4篇文章,申請收費,更多高階功能:自定義選單等,) 2、訂閱號(每天都可以推送文章,申請免費) 訊息出現的位置不同,訂閱號統一在微信訂閱號模組下管理。 二者共用一種對接方式。 瞭解詳情 一、引導使用者開啟授權頁面 window.location.

laravel公眾授權原生

use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Cache; use Ixudra\Curl\Facades\Curl; cla

公眾授權前端

前言 前段時間,專案對舊版的微信公眾號進行改版,需要對部分頁面進行微信授權,我們的網頁授權通過前後端進行,前端負責發起請求和呼叫後臺介面,後臺負責獲取微信端的回撥以及提供前端所需的介面。整個微信授權完成了,期間磕磕碰碰,踩了不少的坑,因此總結和梳理一下整個微信

公眾授權登入java實現

步驟: 1、 使用第三方工具,生成內網對映 2、 微信公眾平臺使用測試賬號 3、 測試賬號中需要配置自己的域名,並關注該臨時測試使用的公眾號 4、 下載一個瀏覽器的二維碼外掛 4、 編碼測試 使用花生殼進行內網穿透 注意,因為我使用的是808