176 php 微信第三方平台填坑记

微信第三方平台填坑记


1.收不到component_verify_ticket

微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket

文档之中说 component_verify_ticket发到“授权事件接收URL”
truth is 是发送到”公众号消息与事件接收URL”

2.消息解密参数

微信服务器会将以下参数以post的形式发送,例如

$timeStamp    = "1466476949";
$nonce        = "1261633649";
$encrypt_type = "aes";
$msg_sign     = "ccbc6ffc3b2c852ec6e597717165061748e22645";
$signiture    = "b097df5d4858a0941e7f368ee6befce326625fdf";

以及xml格式的postdata,例如

$from_xml = 
"<xml>
    <AppId><![CDATA[wxbe6f86f06bc8c62c]]></AppId>
    <Encrypt><!CDATA[EtmM85Kxe9/pXqxuHSDngfRA65a/m6NJsFpKQOKyQ/IwopNjH3sngqaKeY86Tk9/ForvqhJ1MfRfvzr/Vpu1pFOaoVbxG4jk1oBSb5TAsQnUMflbFACyEFdbw6kRo13uni8EvTaIG/DZBnkebzDVc7YS0ZUPVlN2kMZcBhvyVXfgx6xQU3MJ2TH3mwCOPRlDl+P+rIpEs/Fu0DsUXFVW1mTz0ohxhYWmX6ung7oyUZkqObG9erDDaJmU+ZkVUBBbuDFmrNvL7l9d+d7I/R8+lZA+7IBJKY2OqAjDx/ybm1VbCrtetifE9ncidqCfk7kHZ7hENVrY0GiD2Yg5jdrZ3ubRMtnEzhOq38qe9zNRH161qqX4po0m9V+1ECt15QkxYc+nM7124aoSwBBVgMGJVyb1F0krFFFLsb2PJDUt/s8jkDSKawbef9tjkHq6Yh8pehZuH0Ap7+RLt7xygUX5LQ==]]>
    </Encrypt>
</xml>";

实例化解密操作类需要以下参数

//$token, $encodingAesKey, $appId可在第三方平台详情页看到
 $pc = new wxBizMsgCrypt($token, $encodingAesKey, $appId);

获取解密后的结果需要以下参数

$errCode = $pc-> decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);

3.需要mcrypt扩展

需要为php安装mcrypt扩展

4.post得到的xml数据需要加入ToUserName节点

$encryptMsg   = $GLOBALS['HTTP_RAW_POST_DATA'] ;
$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);

5.获取component_access_token的参数问题

  • php的curl组件不支持https协议,需要更改配置项
  • 参数不是通常的key => value ,而是一个json字符串

6.component_verify_ticket 空行问题

发现每次有新的公众号授权,ticket表会存入一条空行.

原因是每次有新的用户授权,微信服务器会ticket接收接口推送以下的xml

<xml>
    <AppId><![CDATA[wxbe6f86f06bc8c62c]]></AppId>
    <CreateTime>1467785915</CreateTime>
    <InfoType>
        <![CDATA[unauthorized]]>
    </InfoType>
        <![CDATA[wx2737d4a373c87cbe]]>
    </AuthorizerAppid>
</xml>

7.当帮助公众号实现业务时

如获取用户基本信息:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

这里的access_token 使用的是authorizer_access_token,而不是component_access_token

8.实现网页授权

文档在此,按照文档来就好

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318590&token=b7f3e7ae8c758385d1d712cd4dafa8f9c3c59e13&lang=zh_CN

9.全网发布

这里有两个坑

加密

返回普通文本消息发送事件消息 接口发送的xml消息需要加密

<返回Api文本消息> 接口

文档说要调用客服接口发送xml,其实是发送json_encode后的数组

$data = array('touser'=>$packet['from'],'msgtype'=>'text','text'=>array('content'=>$text));
$json = @json_encode($data);
$accessToken = readAccessToken();    //读取已保存的access_token
$result = http_post("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=$accessToken",$json);

10.授权的公众号结果串掉了

pre_auth_code 需要每次实时请求!
虽然它有过期时间,但是毛用都没有,每次生成授权链接,都需要调接口重新请求一次pre_auth_code,因为对于同一个pre_auth_code,会返回同一个公众号信息

11.jssdk 分享接口报invalid signature

导致这个问题的原因很多

我的问题是因为取jsapi_ticket的时候,里面的access_token字段填充的值取了component_access_token,
而正确的填充值应该是authorizer_access_token

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值