Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Post-Anfrage in der WeChat-Applet-Entwicklung

Detaillierte Erläuterung der Post-Anfrage in der WeChat-Applet-Entwicklung

韦小宝
韦小宝Original
2018-03-14 16:52:0314239Durchsuche

In diesem Artikel geht es um die Post-Anfrage bei der Entwicklung des WeChat-Applets. Wenn Sie nichts über die Post-Anfrage bei der Entwicklung des WeChat-Applets wissen oder sich für die Post-Anfrage bei der Entwicklung von interessieren WeChat-Applet, dann schauen wir uns diesen Artikel gemeinsam an. Kommen wir ohne weitere Umschweife zur Sache!

1.Post-Anfrage


wx.request(OBJECT)
wx.request
initiiert ist eine HTTPS-Anfrage. Ein WeChat-Applet kann nur 5 Netzwerkanforderungsverbindungen gleichzeitig haben.
Offizielle Website-Beschreibung


kann nicht im Header
参数名 类型 必填 说明
url String 开发者服务器接口地址
data Object、String 请求的参数
header Object 设置请求的 header , header 中不能设置 Referer
method String 默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
success Function 收到开发者服务成功返回的回调函数,res = {data: '开发者服务器返回的内容'}
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)
Parametername
Typ Erforderlich Beschreibung th >
url String Ist Adresse der Entwicklerserverschnittstelle
Daten Objekt, String Nein Angeforderte Parameter
Header Objekt Nein Request-Referer festlegen
Methode String festgelegt werden Nein Standard ist GET, gültige Werte: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
Erfolg Funktion Nein Die Rückruffunktion wurde vom Entwicklerdienst erfolgreich zurückgegeben, res = {data: 'Inhalt zurückgegeben vom Entwicklerserver'}
fail Function Nein Rückruffunktion für fehlgeschlagenen Schnittstellenaufruf
abgeschlossen td> Funktion Nein Die Rückruffunktion am Ende des Schnittstellenaufrufs (erfolgreicher Aufruf, fehlgeschlagener Aufruf wird ausgeführt)


WeChat-Applet-Beispiel

wx.request({
  url: 'test.php', //仅为示例,并非真实的接口地址
  data: {
        x: '' , 
        y: ''
   }, 
  header: { 
    'content-type': 'application/json' 
  }, 
  success: function(res) { 
    console.log(res.data) 
  }
})


Diese Methode zum Anfordern von GET ist in Ordnung und der Header muss nicht hinzugefügt werden.
Aber POST hat ein großes Problem.

Ich verwende den folgenden Code zum Debuggen (Code 1):

wx.request({
    url: ApiHost + '/?service=default.getOrderInfo',
    data: {
      'order_id': order_id
    },
    method: 'POST',
    success: function (res) {
      // console.log(res);
      if (res.data.ret == 200) {
       //something to do
      }
      else{
       //something to do
      }
    }
    fail: function (res) {
      console.log(res);
    }
  });

Achten Sie auf das Bild unten, die Eingabeaufforderung im WeChat-Entwicklungstool:

Die POST-Anfrage fügt den Wert der Daten in die Anforderungsnutzlast anstelle der Abfragezeichenfolgenparameter ein. Wenn der Backend-Server nicht darauf achtet, wird dies nicht der Fall sein in der Lage sein, die Daten zu erhalten.
Es gibt viele Modifikationen im Internet, wie diese. ----Header hinzufügen

wx.request({
    url: ApiHost + '/?service=default.getOrderInfo',
    data: {
      //数据urlencode方式编码,变量间用&连接,再post
      'order_id='+order_id
    },
    method: 'POST',
    header:{
      'content-type':'application/x-www-form-urlencoded'
    },
    success: function (res) {
      // console.log(res);
      if (res.data.ret == 200) {
       //something to do
      }
      else{
       //something to do
      }
    }
    fail: function (res) {
      console.log(res);
    }
  });

Wenn Sie es so ändern, benötigt das Backend keine spezielle Verarbeitung.
Aber...

Da ich immer noch die Standardmethode verwenden möchte, besteht die einzige Möglichkeit darin, den Backend-Server zu ändern.
Ich verwende hier das Phalapi-Framework, ich empfehle es~~~

if(DI()->request->getHeader('content-type'))
{    
  $contentType = DI()->request->getHeader('content-type');
}
if(!empty($contentType)&&(strtolower(@$contentType) === 'application/json'))
{
    $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : "{}";
    DI()->request = new PhalApi_Request(array_merge($_GET,json_decode($HTTP_RAW_POST_DATA, true)));
}

Schließlich habe ich das Debugging mit Code 1 auf dem PC bestanden. Verwenden Sie Standardanfragen und nicht den application/x-www-form-urlencoded-Modus.

Aber...wenn ich eine echte Maschine zum Debuggen verwende, warum kann ich dann den Anforderungsparameter nicht erneut erhalten? Seltsame Dinge. . . . . . . . .
Schließlich durch Paketerfassungsanalyse

Echtes Maschinenterminal

POST /?service=default.getOrderInfo HTTP/1.0
Host: proxy
Connection: close
Content-Length: 43
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 
MicroMessenger/6.5.1 NetType/WIFI Language/zh_CN
Referer: https://servicewechat.com/###/0/page-frame.html
Accept-Language: zh-cn

{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}

PC-Simulationsentwicklungsterminal


POST /?service=default.getOrderInfo HTTP/1.0
Host: proxy
Connection: close
Content-Length: 43
Origin: http://###.appservice.open.weixin.qq.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 
appservice webview/100000
content-type: application/json
Accept: */*
Referer: https://servicewechat.com/####/devtools/page-frame.html
Accept-Encoding: gzip, deflate, br

{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}

Endlich den Unterschied gefunden:
Content-Type und content-type
Simulator Der Standardwert ist Content-Type
Der Standardwert für echte Geräte ist Content-Type
Der Back-End-Server fügt die Verarbeitung von Content-Type hinzu und fertig.

Das Obige ist der gesamte Inhalt dieses Artikels. Wenn Sie es nicht gut verstehen, können Sie beide Seiten problemlos selbst meistern!

Verwandte Empfehlungen:
Detaillierte Erläuterung des Pulldown-Ladens und der Pullup-Aktualisierung des WeChat-Applets

WeChat-Applet implementiert Finger-Zoom-Bildcode-Sharing

PHP implementiert WeChat-Applet-Zahlungscode-Sharing

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Post-Anfrage in der WeChat-Applet-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn