php开发微信第三方平台遇到的那些坑
2017-05-06 11:50
288 查看
先谈component_verify_ticket
一共有两个坑,一个是php接收xml不要用$_post 还有一个就是解密后的ticket需要干掉字符串前面的”ticket@@@”不说了 上代码吧
include_once "wx_third/wxBizMsgCrypt.php";//引入腾讯官方example function wxservice(){ $xml_msg=file_get_contents('php://input'); $msg=array( "timeStamp" => empty($_GET['timestamp']) ? "" : trim($_GET['timestamp']) , "nonce" => empty($_GET['nonce']) ? "" : trim($_GET['nonce']) , "msg_sign" => empty($_GET['msg_signature']) ? "" : trim($_GET['msg_signature']) ); $wx_settins=array( 'appId'=>"xxx", 'token'=>"xxx", 'encodingAesKey'=>"xxx", 'secrect'=>"xxx", 'ticket'=>"xxx" ); $result=component_decode($xml_msg,$msg,$wx_settins); } function component_decode($xml,$msg,$config){ $pc = new WXBizMsgCrypt($config['token'], $config['encodingAesKey'], $config['appId']); $xml_tree = new DOMDocument(); $xml_tree->loadXML($xml); $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); $message = ''; $errCode = $pc->decryptMsg($msg['msg_sign'], $msg['timeStamp'], $msg['nonce'], $from_xml, $message); if ($errCode == 0) { $xml = new DOMDocument(); $xml->loadXML($message); $array_e = $xml->getElementsByTagName('ComponentVerifyTicket'); $component_verify_ticket = preg_replace("/ticket@@@/","",$array_e->item(0)->nodeValue) ;//处理解密后的字符串 return $component_verify_ticket; }else{ //如果出错则返回数组 return array( 'err_msg'=>$errCode ); } }
再谈component_access_token
很多朋友stream_context_create会报40002错误,我觉得可能是腾讯服务器对换行符的解析有问题导致的,于是改用了curl处理POST请求function fresh_access_token($ticket=null){ $wx_settins=$wx_settins=array( 'appId'=>"xxx", 'token'=>"xxx", 'encodingAesKey'=>"xxx", 'secrect'=>"xxx", 'ticket'=>"xxx" ); $post_data = array( 'component_appid' =>$wx_settins['appId'], 'component_appsecret' => $wx_settins['secrect'], 'component_verify_ticket' =>$ticket ); $data=json_decode(request_post('https://api.weixin.qq.com/cgi-bin/component/api_component_token', $post_data),1); } function request_post($url,$data){ $data =json_encode($data); $ch = curl_init(); //用curl发送数据给api curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $data ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); $response = curl_exec( $ch ); curl_close( $ch ); return $response; }
pre_auth_code
pre_auth_code和verify_ticket一样,字符串前面有 preauthcode@@@ 需要替换掉相关文章推荐
- 微信第三方平台开发中遇到的问题总结---java
- 微信第三方平台开发详解——PHP版
- 微信第三方平台开发详解——PHP版
- 微信第三方平台开发详解——PHP版
- 微信公众账号登陆授权开发——5(解决使用官方获获取第三方平台方获取预授权码)
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- 微信公众开放平台开发02---微信公众平台PHP接口和java接口对比
- 微信红包店小程序开发过程中遇到的问题 php获取附近周边商家 显示最近商家
- 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
- 微信第三方平台开发流程
- 无需公众号PHP微信登录微信授权微信第三方登录微信开发php开发
- PHP学习笔记(一):开发微信平台
- 微信第三方平台推送verify_ticket的接收处理(PHP实现)
- [转载]Android平台第三方应用分享到微信开发
- 微信第三方平台开发经验总结(五):接收授权方授权请求并保存授权方信息
- 微信第三方平台开发授权2:获取component_access_token,pre_auth_code
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- [转载]Android平台第三方应用分享到微信开发
- 微信小程序开发之路上遇到的那些坑
- 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台