微信公众号授权---第三方平台(php)

用过微擎、微赞、微动力等第三方公众号管理平台的人都知道,需要在这些平台中接入公众号(就是授权给第三方平台),为了了解探究微擎中扫码授权的机制,看了微信开放平台中的第三方平台开发,并做了实例,写下此文纪念我这一天遇到的坑!!!

公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务


第一个注意点:申请的时候有一个校验文件,需要放到根目录
这里写图片描述

第二个注意点:测试公众号 已授权的第三方平台不要超过5个,不然后续授权会出错,请看http://www.pc0359.cn/article/jiaocheng/68434.html

第三个注意点:消息校验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。

我分了四个文件来写授权,以下是示例代码

官方的示例代码:https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip

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&pre_auth_code=preauthcode@@@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>    

效果如下:
这里写图片描述

点击就可以授权啦!

授权失败记的看一下上面我说的注意点!!!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值