小程序模板網(wǎng)

踩坑記:模板消息報47001 data format error,wx.login解密之后出現(xiàn)亂碼 ...

發(fā)布時間:2017-12-02 17:01 所屬欄目:小程序開發(fā)教程

一:模板消息報47001 data format error原因解決分享,更多模板消息相關(guān)知識請看:跳坑《九十七》模板消息相關(guān)問題說明主要原因是請求的數(shù)據(jù)不是json格式引起的分享下我用的代碼和函數(shù): //發(fā)送 ...

 
 
 

一:模板消息報47001 data format error原因解決分享

 

更多模板消息相關(guān)知識請看:跳坑《九十七》模板消息相關(guān)問題說明

主要原因是請求的數(shù)據(jù)不是json格式引起的

分享下我用的代碼和函數(shù):

 

		
  1. //發(fā)送模板消息
  2. public function sendmessage(){
  3. $data=$_POST=json_decode(file_get_contents('php://input'), TRUE);
  4. $access_token=$this->getAccessToken();
  5. $request_url='https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;
  6. $request_data=array(
  7. 'touser'=>$data['touser'],//接收者(用戶)的 openid
  8. 'template_id'=>$data['template_id'],//所需下發(fā)的模板消息的id
  9. 'page'=>$data['page'],//點擊模板卡片后的跳轉(zhuǎn)頁面
  10. 'form_id'=>$data['form_id'],//表單提交場景下,為 submit 事件帶上的 formId;支付場景下,為本次支付的 prepay_id
  11. 'data'=>$data['data'],//"keyword1": {"value": "339208499", "color": "#173177"}
  12. 'emphasis_keyword'=>$data['emphasis_keyword']//模板需要放大的關(guān)鍵詞,不填則默認(rèn)無放大
  13. );
  14. $return=json_decode(https_request($request_url,$request_data,'json'),true);
  15. $this->response($return,'json');
  16. }
 

		
  1. //發(fā)送請求
  2. function https_request($url,$data,$type){
  3. if($type=='json'){//json $_POST=json_decode(file_get_contents('php://input'), TRUE);
  4. $headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
  5. $data=json_encode($data);
  6. }
  7. $curl = curl_init();
  8. curl_setopt($curl, CURLOPT_URL, $url);
  9. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  10. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  11. if (!empty($data)){
  12. curl_setopt($curl, CURLOPT_POST, 1);
  13. curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
  14. }
  15. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  16. curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
  17. $output = curl_exec($curl);
  18. curl_close($curl);
  19. return $output;
  20. }
 

二:調(diào)用wx.login解密之后出現(xiàn)亂碼的問題

 

分享者:管大俠,原文地址  最近在給公司開發(fā)微信小程序,需要用到微信登錄,根據(jù)文檔要求需要把獲取的用戶信息按照AES進行解密。

我使用的是官方提供的PHP demo,拷貝到程序中,測試發(fā)現(xiàn),解密之后的數(shù)據(jù)前面有一串亂碼。 

類似于這樣子的,前面一段是亂碼。

經(jīng)過仔細(xì)的檢查,發(fā)現(xiàn)官方的提供的demo中的帳號和機密之后的信息是可以解密的,這就說明解密代碼是沒有問題的。

后來查詢微信開發(fā)者社區(qū),找到好多解密失敗。其中一個回答說是因為多次調(diào)用wx.login之后導(dǎo)致的問題。

終于看到解決方案,于是趕緊去看我的代碼??墒遣檎野胩彀l(fā)現(xiàn)只調(diào)用了一次,根本不是這個問題。

有一次走到了死胡同,沒辦法了,還是看代碼吧。

根據(jù)文檔,應(yīng)該是先調(diào)用wx.login(),成功之后再調(diào)用wx.getUserInfo(), 于是我就想,會不會是我把wx.getUserInfo()獲取到的值沒有正確的傳給服務(wù)器呢?

既然不確定,那就得看看。于是,打印wx.getUserInfo()的返回值,是這樣子的 

看到結(jié)果之后我就跟我的請求服務(wù)器的參數(shù)挨個對照,當(dāng)看到encryptData時,發(fā)現(xiàn)了問題,文檔上寫的是應(yīng)該把encryptedData的值用于解密,而我則是把encryptData的值

取出來了,所以解密結(jié)果就不正確了。

至此,發(fā)現(xiàn)問題,把參數(shù)改成encryptedData之后解密成功。

總結(jié)一下問題: 由于wx.getUserInfo()返回值中encryptData和encryptedData參數(shù)名稱過于相似,導(dǎo)致我用錯變量,實在是不應(yīng)該。

至于為什么微信要多返回一個沒用的參數(shù)(目前還沒發(fā)現(xiàn)它的作用),我就不知到了,而且文檔上根本就沒提到這個。

希望大家編碼的時候能夠細(xì)心一點,不要犯我這樣的錯誤。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/18027.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢