午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

小程序模板網

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

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

一:模板(ban)消(xiao)(xiao)息報47001 data format error原因(yin)解決分享,更多模板(ban)消(xiao)(xiao)息相關知識請(qing)看:跳(tiao)坑《九十七》模板(ban)消(xiao)(xiao)息相關問題說明主要原因(yin)是(shi)請(qing)求的數據不是(shi)json格式引起(qi)的分享下我(wo)用的代碼(ma)和函數: //發送 ...

 
 
 

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

 

更多模(mo)(mo)板消息(xi)相關知識請看:跳坑(keng)《九十(shi)七》模(mo)(mo)板消息(xi)相關問題說明(ming)

主要原因是(shi)請求的數據不(bu)是(shi)json格(ge)式(shi)引(yin)起的

分享下我用的代(dai)碼和(he)函數:

 

		
  1. //發送模板消息
  2. public function sendmessage(){
  3. $data=$_POST=json_decode(file_get_contents('php://input'), TRUE);
  4. $access_token=$this->getAccessToken();
  5. $request_url='//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'],//所需下發的(de)模板消息的(de)id
  9. 'page'=>$data['page'],//點(dian)擊模(mo)板卡(ka)片后的跳轉頁面
  10. 'form_id'=>$data['form_id'],//表單(dan)提交場景(jing)下(xia),為 submit 事件帶上的 formId;支付(fu)場景(jing)下(xia),為本(ben)次支付(fu)的 prepay_id
  11. 'data'=>$data['data'],//"keyword1": {"value": "339208499", "color": "#173177"}
  12. 'emphasis_keyword'=>$data['emphasis_keyword']//模板需要放大的關鍵(jian)詞,不填(tian)則默(mo)認無放大
  13. );
  14. $return=json_decode(https_request($request_url,$request_data,'json'),true);
  15. $this->response($return,'json');
  16. }
 

		
  1. //發送請求
  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. }
 

二:調用wx.login解密之后出現亂碼的問題

 

分享者:管大俠(xia),原文地址  最近在給(gei)公(gong)司開發微(wei)信(xin)小程序,需要用到微(wei)信(xin)登錄(lu),根據(ju)文檔要求需要把獲取(qu)的用戶信(xin)息按(an)照AES進(jin)行解密。

 我(wo)使(shi)用的是(shi)官方提供(gong)的PHP demo,拷貝到程序中,測試發現(xian),解密之后(hou)的數據前面有一串亂碼。 

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

經過仔細的(de)(de)檢查(cha),發現官方的(de)(de)提供的(de)(de)demo中的(de)(de)帳號和機密(mi)之后的(de)(de)信(xin)息是(shi)可以(yi)解密(mi)的(de)(de),這就說明解密(mi)代碼是(shi)沒有問題(ti)的(de)(de)。

后來查詢微信開發者社區,找到好多(duo)解密失敗(bai)。其中一個(ge)回答說(shuo)是(shi)因(yin)為多(duo)次調(diao)用wx.login之后導致的(de)問題(ti)。

終于(yu)看(kan)到解(jie)決方案,于(yu)是趕(gan)緊去看(kan)我的代碼。可(ke)是查找(zhao)半天發現只調用了一(yi)次(ci),根本不是這(zhe)個問題。

有一次走到了死(si)胡同,沒辦(ban)法(fa)了,還是看代碼吧(ba)。

根據文檔,應該是先(xian)調用wx.login(),成功之后(hou)再調用wx.getUserInfo(), 于是我就想,會不會是我把wx.getUserInfo()獲取到的(de)值沒有正確的(de)傳給服務器呢(ni)?

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

看到結果之后我就跟(gen)我的(de)(de)請求服務器(qi)的(de)(de)參(can)數挨個對照,當看到encryptData時(shi),發現了問(wen)題,文檔上寫的(de)(de)是應該把encryptedData的(de)(de)值(zhi)用于解密,而我則是把encryptData的(de)(de)值(zhi)

取出(chu)來了,所(suo)以解(jie)密結(jie)果就不正確(que)了。

 至此,發現問題,把(ba)參數改(gai)成encryptedData之后解密(mi)成功。

總結(jie)一下問題(ti): 由(you)于wx.getUserInfo()返回值中encryptData和encryptedData參(can)數名稱(cheng)過(guo)于相似(si),導致(zhi)我(wo)用錯變量,實在是(shi)不應該。

 至(zhi)于為什么(me)微信要多返(fan)回(hui)一個沒(mei)(mei)用(yong)的參數(目前還沒(mei)(mei)發(fa)現它的作用(yong)),我就(jiu)不(bu)知到(dao)了,而且文檔(dang)上根本就(jiu)沒(mei)(mei)提到(dao)這個。

希望大家編碼的(de)時候能夠(gou)細心一(yi)點,不要犯我這(zhe)樣(yang)的(de)錯誤。



易優小(xiao)程序(企業(ye)版(ban))+靈活api+前后代碼開源 碼云倉庫:
本文地址://www.jinyoudianli.com/wxmini/doc/course/18027.html 復制鏈接 如(ru)需定(ding)制請聯系易優客服咨詢:

工作日 8:30-12:00 14:30-18:00
周六及部分節(jie)假日提供(gong)值(zhi)班服(fu)務

易小優(you)
轉人工 ×