摘要:先談一共有兩個坑,一個是接收不要用還有一個就是解密后的需要干掉字符串前面的不說了上代碼吧引入騰訊官方處理解密后的字符串如果出錯則返回數(shù)組再談很多朋友會報錯誤,我覺得可能是騰訊服務器對換行符的解析有問題導致的,于是改用了處理
先談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 = "再談component_access_token"; $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{ //如果出錯則返回數(shù)組 return array( "err_msg"=>$errCode ); } }
很多朋友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發(fā)送數(shù)據(jù)給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@@@ 需要替換掉
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/25993.html
摘要:目前正在寫一個微信公眾號的小項目,記錄一下遇到的問題和解決方法主要是前端。前端提交時使用,在后端再取出對應的微信支付看了下文檔,以前是需要用喚起支付,而現(xiàn)在則是把微信內置到了微信的瀏覽器中。 目前正在寫一個微信公眾號的小項目,記錄一下遇到的問題和解決方法(主要是前端)。內容持續(xù)更新中~ 主要實現(xiàn) 前后端分離前端為 SPA 單頁面使用微信的JSSDK微信支付 技術方案 后端使用 php ...
摘要:目前正在寫一個微信公眾號的小項目,記錄一下遇到的問題和解決方法主要是前端。前端提交時使用,在后端再取出對應的微信支付看了下文檔,以前是需要用喚起支付,而現(xiàn)在則是把微信內置到了微信的瀏覽器中。 目前正在寫一個微信公眾號的小項目,記錄一下遇到的問題和解決方法(主要是前端)。內容持續(xù)更新中~ 主要實現(xiàn) 前后端分離前端為 SPA 單頁面使用微信的JSSDK微信支付 技術方案 后端使用 php ...
摘要:原文見我的博客,點擊進入使用開發(fā)微信公眾號下站點的填坑之旅本文為我創(chuàng)業(yè)過程中,開發(fā)項目的填坑之旅。作為一個技術宅男,我的項目是做一個微信公眾號,前后端全部自己搞定,不浪費國家一分錢。 原文見我的博客,點擊進入使用vue開發(fā)微信公眾號下SPA站點的填坑之旅 本文為我創(chuàng)業(yè)過程中,開發(fā)項目的填坑之旅。作為一個技術宅男,我的項目是做一個微信公眾號,前后端全部自己搞定,不浪費國家一分錢^_^。 ...
摘要:需求最近在做一個項目需求,分享領好書活動,獲取用戶的個人信息以及,并誘導用戶分享給好友或朋友圈,達到裂變拉新的目的。 需求 最近在做一個項目需求,分享領好書活動,獲取用戶的個人信息以及unionID,并誘導用戶分享給好友或朋友圈,達到裂變拉新的目的。在做的過程中遇到了一些坑的地方,所以回過來總結一下 技術方案 使用微信JS-SDK自定義分享到好友和分享到朋友圈 實現(xiàn)步驟 1、要實現(xiàn)微信...
閱讀 2201·2023-04-25 15:24
閱讀 1660·2019-08-30 12:55
閱讀 1673·2019-08-29 15:27
閱讀 552·2019-08-26 17:04
閱讀 2496·2019-08-26 10:59
閱讀 1869·2019-08-26 10:44
閱讀 2264·2019-08-22 16:15
閱讀 2670·2019-08-22 15:36