Maison > Article > développement back-end > Explication détaillée de la demande de publication dans le développement de l'applet WeChat
Cet article parle de la Demande de publication dans le développement de l'applet WeChat Si vous ne connaissez pas la demande de publication dans le développement de l'applet WeChat ou si vous êtes intéressé par la demande de publication dans le développement de. Applet WeChat, alors regardons cet article ensemble. Bon, sans plus tarder, entrons dans le vif du sujet !
wx.request(OBJECT)
wx.request
initiée est une requête HTTPS. Une applet WeChat ne peut avoir que 5 connexions de requête réseau en même temps.
Description officielle du site
|
Type | Obligatoire | Description th > | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
url | Chaîne | Est | Adresse de l'interface du serveur développeur | ||||||||||||||||||||||||||||||||
données | Objet, Chaîne | Non | Paramètres demandés | ||||||||||||||||||||||||||||||||
en-tête | Objet | Non | Définir le référent de la demande | ||||||||||||||||||||||||||||||||
method | String | ne peut pas être défini dans l'en-tête. Non | La valeur par défaut est GET, valeurs valides : OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT | ||||||||||||||||||||||||||||||||
succès | Fonction | Non | Reçu la fonction de rappel renvoyée avec succès par le service développeur, res = {data: 'Contenu renvoyé par le serveur développeur'} | ||||||||||||||||||||||||||||||||
échec | Fonction | Non | Fonction de rappel en cas d'appel d'interface échoué | ||||||||||||||||||||||||||||||||
complète td> | Fonction | Non | La fonction de rappel à la fin de l'appel d'interface (appel réussi, l'appel échoué sera exécuté) |
Exemple d'applet WeChat
wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) } })
Cette méthode de demande de GET est OK et l'en-tête n'a pas besoin d'être ajouté.
Mais POST a un gros problème.
J'utilise le code suivant pour le débogage (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); } });
Faites attention à l'image ci-dessous, l'invite dans l'outil de développement WeChat :
La requête POST mettra la valeur des données dans la charge utile de la requête au lieu des paramètres de la chaîne de requête. Si le serveur backend n'y prête pas attention, il ne le fera pas. pouvoir obtenir les données.
Il existe de nombreuses modifications sur Internet, comme celle-ci. ----Ajouter un en-tête
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); } });
Si vous le modifiez ainsi, le backend n'a pas besoin de traitement particulier.
Mais...
Parce que je souhaite toujours utiliser la méthode standard, le seul moyen est de modifier le serveur backend.
J'utilise ici le framework Phalapi, je le recommande~~~
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))); }
Enfin, j'ai réussi le débogage avec le Code 1 sur le PC. Utilisez des requêtes standards et n’utilisez pas le mode application/x-www-form-urlencoded.
Mais... quand j'utilise une vraie machine pour le débogage, pourquoi ne puis-je pas recevoir à nouveau le paramètre de requête. Des choses étranges. . . . . . . . .
Enfin, grâce à l'analyse de capture de paquets
Terminal de machine réelle
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"}
Terminal de développement de simulation PC
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"}
Enfin trouvé la différence :
Content-Type et content-type
Simulateur La valeur par défaut est le type de contenu
La valeur par défaut pour les appareils réels est le type de contenu
Le serveur principal ajoute le traitement du type de contenu et c'est fait.
Ce qui précède représente tout le contenu de cet article. Si vous ne le comprenez pas bien, vous pouvez facilement maîtriser les deux côtés par vous-même !
Recommandations associées :
Explication détaillée du chargement déroulant et de l'actualisation pull-up de l'applet WeChat
L'applet WeChat implémente le partage de code d'image avec zoom doigt
PHP implémente le partage de code de paiement de l'applet WeChat
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!