消息关闭
    暂无新消息!
目前在微信中,通过post方式发送form表单中的数据,无法接收到参数,全是null,但是在手机浏览器中可以接收到数据,这个问题大家遇到过吗?是哪里出的问题呢,求大牛指点,感激不尽!

32个回答

︿ 3
目前在提交不重要的少量参数时,可以使用get方式来提交form表单,但是数据重要且数量比较多的时候,就需要使用post了,继续顶,大家讨论起来啊,一起分享可以解决的方案。
PS:目前我使用了ajax提交,也可以解决,但是数据量特别多的时候,写起来很不方便。
期待更完美的解决方案。
︿ 3
哭了,终于找到组织了,泪流满面,我们用的阿里云,nginx作反代,后端是puma跑的ROR,用户在微信网页里post表单,有用户会出现puma报的底层错误,通过nginx日志把请求体打印出来,发现了同样的情况,同一个表单在同一部手机里的同一时间内被post了两次到服务器,IP还不同。。,一次可以正常解析,一次无法解析

这样的问题只会发生在post请求上,但是我们用angularjs的另一个网站通过$http.post也会发现消息体乱码的情况,不知道是否与此有关。
︿ 3
今天遇到这个问题,后来我找到这个问题的原因是因为在submit下获取了openid,获取openId后会再次访问submit并带上code参数,这是第二次访问submit了,自然就没有post数据,只有get的数据code。
︿ 2
我不会告诉你们有时候微信ajax提交数据会报跨域异常......... 
微信到底有多少坑呢.......
︿ 2
我两天我也遇到这个蛋疼的问题了,找了好久的原因,只有Android微信会出现这个问题,还没遇到其他能出问题的方式,看到lz发发论坛之后我才知道是post的问题,我干脆把表单是method改为get了,反正这个表单的数据也不重要也不多。经过测试没有问题
︿ 2
微信浏览器里从一个页面post到另一个页面,form里的值,有时正常,有时为空,期待解决办法!!!
︿ 2
我所有的表单都不用js处理,全部都交给php处理,好象从来没确到这类问题
︿ 2
这是微信下自有浏览器的一些问题,没办法解决。
所有的数据提交请使用ajax进行交互。
︿ 1
我也遇到了,我比你更神奇,同样的code在我们的服务器上面一会可以,一会不行,在SAE服务器上没问题,在本地没问题,一个post表单都搞死人,难得真的要用AJAX post?
︿ 1
表单提交时不能使用 target=_blank  必须 使用   target="_self" 或者去掉这个属性 ,就可以提交并接受信息成功! 
-----------------------------------------------------------------------------------------------------------

www.dahongren.cc  有需要做微信收款、微信公众号开发的业务都可以找我!微信号 dahongrenjia
︿ 1
十分感谢6L的大神的解答,微信开发目前越来越流行,可是微信竟然出这种错误,给微信开发者带来难题,希望腾讯能尽快给出解决方案,很耽误事啊
如果有大神能完美解决此问题,也希望大神赐教啊,我和其他遇到此问题的小伙伴们谢谢啦
︿ 1
现在都2017年了,这个问题依然没有存在,唉……………………
︿ 0
我用POST 经常多存入几条数据 而且相差10几秒;但是其它页面同一个方法确没有问题……求解决思路?
︿ 0
微信支付纠结了很久。

发现没有办法从FROM表单提交数据给微信

我理解的流程是这样的

我的表单文件 1.PHP 给支付页面 WX.PHP 提交数据

在require_once "WxPay.JsApiPay.php";   之前,可以使用 $_POST[]获取到数据。通过exit终止程序,可以正常输出表单数据。

但是加载获取 $openId 之后。中间有个一个网页跳转。

从微信服务器返回 WX.PHP页面后,没有POST到数据。因为已经不是从原页面1.PHP来的。

所以一切都是空谈。

怎么能获取数据呢?

查阅了微信支付开放文档。

获取openid的时候可以给微信服务器发送一个state 字段做为第三方效验,是一个安全措施,仿制伪造数据的。

那么我们把POST数据传给微信服务器,微信服务器会原样返回该数据。

就这样,我们把表单获取的POST数据一并提交给微信,

微信获取OPENID后会把 state 一起返回给该页面。

我们在通过GET,把state数据拿来了。进行一次拆分。

拆分出我们需要的参数。

代码如下:

使用微信官方DEMO文件。

打开WxPay.JsApiPay.php 文件,怎么POST信息。然后按照一定的格式拼接,按个是拼接主要是为了拆分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private function __CreateOauthUrlForCode($redirectUrl)
{
    $dhh = $_POST['WIDout_trade_no'];  //获取相关结算页面提交的信息
    $spxx = $_POST['WIDsubject']; //获取商品描述
    $jiage = $_POST['WIDtotal_fee']; //获取订单价格
    $sta = $dhh.'-'.$spxx.'-'.$jiage; //以-为分割拼接信息
    $urlObj["appid"] = WxPayConfig::APPID;
    $urlObj["redirect_uri"] = "$redirectUrl";
    $urlObj["response_type"] = "code";
    $urlObj["scope"] = "snsapi_base";
    $urlObj["state"] = "$sta"."#wechat_redirect"; //把信息提交给state
    $bizString = $this->ToUrlParams($urlObj);
    return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
}
这里做完了,可以使用exit; 做断点测试。测试没有问题了。

回到支付提交页面,如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
$xx = $_GET['state']; //获取返回数据STATE
$chai  = (explode("-",$xx));  //按照 - 拆分提交信息
$out_trade_no = $chai[0];  //按照格式拆分出 订单号
$jiage = $chai[2].'00'; //价格,网站按元算,微信支付按分算,给价格不两个0
$subject = $chai[1]; //商品标记
//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody("云南葡萄烈酒网商品购买");  //商品描述
$input->SetAttach('龍'); //附加数据
$input->SetOut_trade_no($out_trade_no); //商户订单号
$input->SetTotal_fee($jiage); //支付金额单位为分
$input->SetTime_start(date("YmdHis"));  //订单开始时间
$input->SetTime_expire(date("YmdHis", time() + 600)); //订单结束时间
$input->SetGoods_tag($subject); //商品标记
$input->SetNotify_url("这里是你自己的回调地址");
OK 正常了。

目前只会这样处理。有其他好方法请告诉我。主要是不懂javascript。慢慢学习吧。

博主秦自龙,QQ248758228 微信QT0874 如有需要请联系

我的博客地址:http://qinzilong.com/?p=251
︿ 0
B图:


A图:



这个问题耗费了我们大量的时间去寻找原因,怀疑服务器,怀疑client都做了,最终通过抓包,分析出上面2个流程,B为正确的流程,A就是丢失form数据的流程,
在出错A图里面,client 在请求的时候都会把数据发送到QQ的代理服务器,这个服务的目的有很多,可能是....你懂的,也可能是CDN加速,然后QQ代理服务器反馈给client 805,这个是微信自己定义的http协议,返回这个的时候,它并未把我们正确的表单数据反馈给client,所以当下面向我们服务器发送数据时出现了问题,在我们服务器收到的form数据已经不正确了。


解决办法:
      现在没找到良好的解决方案,我们可以使用一个比较间接的方式来解决它,就是给微信里面直接使用我们服务器的IP地址,不使用域名就可以了,这个处理和805错误有关系,不确定能完全解决。