找回密码
 立即注册
即日起,论坛关闭新用户注册和登录,论坛相关的贴子保留查阅和下载。获得授权后,有技术问题可联系微信 13199509559 一对一解决。 2024-3-12
查看: 4628|回复: 1
打印 上一主题 下一主题

微信H5支付V3 POST无法传递参数的那些坑

37

主题

37

主题

37

主题

超级版主

Rank: 8Rank: 8

积分
0
跳转到指定楼层
1#
岁月无声 发表于 2017-9-24 19:05:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


碰到这个问题的朋友可以参考这个贴子
http://bbs.csdn.net/topics/390992194

我用以下方法解决的:
  1. 微信支付纠结了很久。

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

  3. 我理解的流程是这样的

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

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

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

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

  8. 所以一切都是空谈。

  9. 怎么能获取数据呢?

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

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

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

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

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

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

  16. 拆分出我们需要的参数。

  17. 代码如下:

  18. 使用微信官方DEMO文件。

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

  20. 1
  21. 2
  22. 3
  23. 4
  24. 5
  25. 6
  26. 7
  27. 8
  28. 9
  29. 10
  30. 11
  31. 12
  32. 13
  33. 14
  34. private function __CreateOauthUrlForCode($redirectUrl)
  35. {
  36.     $dhh = $_POST['WIDout_trade_no'];  //获取相关结算页面提交的信息
  37.     $spxx = $_POST['WIDsubject']; //获取商品描述
  38.     $jiage = $_POST['WIDtotal_fee']; //获取订单价格
  39.     $sta = $dhh.'-'.$spxx.'-'.$jiage; //以-为分割拼接信息
  40.     $urlObj["appid"] = WxPayConfig::APPID;
  41.     $urlObj["redirect_uri"] = "$redirectUrl";
  42.     $urlObj["response_type"] = "code";
  43.     $urlObj["scope"] = "snsapi_base";
  44.     $urlObj["state"] = "$sta"."#wechat_redirect"; //把信息提交给state
  45.     $bizString = $this->ToUrlParams($urlObj);
  46.     return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
  47. }
  48. 这里做完了,可以使用exit; 做断点测试。测试没有问题了。

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

  50. 1
  51. 2
  52. 3
  53. 4
  54. 5
  55. 6
  56. 7
  57. 8
  58. 9
  59. 10
  60. 11
  61. 12
  62. 13
  63. 14
  64. 15
  65. 16
  66. 17
  67. 18
  68. //①、获取用户openid
  69. $tools = new JsApiPay();
  70. $openId = $tools->GetOpenid();
  71. $xx = $_GET['state']; //获取返回数据STATE
  72. $chai  = (explode("-",$xx));  //按照 - 拆分提交信息
  73. $out_trade_no = $chai[0];  //按照格式拆分出 订单号
  74. $jiage = $chai[2].'00'; //价格,网站按元算,微信支付按分算,给价格不两个0
  75. $subject = $chai[1]; //商品标记
  76. //②、统一下单
  77. $input = new WxPayUnifiedOrder();
  78. $input->SetBody("云南葡萄烈酒网商品购买");  //商品描述
  79. $input->SetAttach('龍'); //附加数据
  80. $input->SetOut_trade_no($out_trade_no); //商户订单号
  81. $input->SetTotal_fee($jiage); //支付金额单位为分
  82. $input->SetTime_start(date("YmdHis"));  //订单开始时间
  83. $input->SetTime_expire(date("YmdHis", time() + 600)); //订单结束时间
  84. $input->SetGoods_tag($subject); //商品标记
  85. $input->SetNotify_url("这里是你自己的回调地址");
  86. OK 正常了。

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


0

主题

0

主题

0

主题

高级会员

Rank: 4

积分
621
2#
蓝色屠龙刀 发表于 2018-3-6 12:04:41 | 只看该作者
确实不错,眼前一亮的好文












百香果果苗 百香果种植 百香果 广西百香果 批发百香果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表