免费PHP万能建站系统_社区团购SaaS_商城系统_软件开发_虚拟币交易所系统_矿机系统_微信钻石投票系统_成品源码
标题:
微信H5支付V3 POST无法传递参数的那些坑
[打印本页]
作者:
岁月无声
时间:
2017-9-24 19:05
标题:
微信H5支付V3 POST无法传递参数的那些坑
碰到这个问题的朋友可以参考这个贴子
http://bbs.csdn.net/topics/390992194
我用以下方法解决的:
微信支付纠结了很久。
发现没有办法从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。慢慢学习吧。
复制代码
作者:
蓝色屠龙刀
时间:
2018-3-6 12:04
确实不错,眼前一亮的好文
百香果果苗 百香果种植 百香果 广西百香果 批发百香果
欢迎光临 免费PHP万能建站系统_社区团购SaaS_商城系统_软件开发_虚拟币交易所系统_矿机系统_微信钻石投票系统_成品源码 (https://ourphp.net/club/)
Powered by Discuz! X3.2