主题 : 微信小程序中的pay load
级别: 风云使者
UID: 3
精华: 1
发帖: 5641
威望: 2373 点
铜币: 5668 枚
贡献值: 0 点
好评度: 0 点
在线时间: 5716(时)
注册时间: 2010-06-13
最后登录: 2021-01-11
0楼  发表于: 2017-12-08 20:23

微信小程序中的pay load

在微信小程序中, wx.request是一个无法绕过的方法。
但是, 如果我们使用默认的header, 当使用POST方法时, 在服务器端会收不到POST的参数, 如果要收到这个参数, 需要将header 设置为:

header: {
          'content-type':'application/x-www-form-urlencoded'
        },

但是, 上述方法仅仅限于传输的数据不是文件的情况下才有效。
级别: 风云使者
UID: 3
精华: 1
发帖: 5641
威望: 2373 点
铜币: 5668 枚
贡献值: 0 点
好评度: 0 点
在线时间: 5716(时)
注册时间: 2010-06-13
最后登录: 2021-01-11
1楼  发表于: 2017-12-09 10:41

微信小程序在使用默认的json格式情况下,如果使用json方法, 在php 要取得POST数据, 需要进行转换。
在服务器端收到的header 数据如下:


复制代码
  1. Host=>localhost
  2. Connection=>keep-alive
  3. Content-Length=>74
  4. Pragma=>no-cache
  5. Cache-Control=>no-cache
  6. Origin=>http://127.0.0.1:9973
  7. User-Agent=>wechatdevtools appservice port/9974
  8. content-type=>application/json
  9. Accept=>*/*
  10. Referer=>https://servicewechat.com/touristappid/devtools/page-frame.html
  11. Accept-Encoding=>gzip, deflate, br
  12. Accept-Language=>zh-CN,zh;q=0.8

可以看到所有的数据都经过了中间的服务器转寄了。 由于小程序没有cookie机制, 再加上这次服务器的转寄, 让服务器端保持session状态变得不太容易。
取得POST的body数据:

复制代码
  1.   $body = file_get_contents("php://input");
  2.   $input = json_decode($body);
  3.   foreach ($input as $key=>$value) {
  4.            $_POST[$key] = $value;
  5. }