用过微擎、微赞、微动力等第三方公众号管理平台的人都知道,需要在这些平台中接入公众号(就是授权给第三方平台),为了了解探究微擎中扫码授权的机制,看了微信开放平台中的第三方平台开发,并做了实例,写下此文纪念我这一天遇到的坑!!!
公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务
第一个注意点:申请的时候有一个校验文件,需要放到根目录
第二个注意点:测试公众号 已授权的第三方平台不要超过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 = "";$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了,然后就能授权啦
<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>
效果如下:
点击就可以授权啦!
授权失败记的看一下上面我说的注意点!!!
Copyright © 2021.自由园 All rights reserved. 鲁ICP备16000743号 滇公网安备 53010302001103号