技术问答
BBS
应用市场
联系合作
傲派软件
伟成科技
用户名
Email
自动登录
找回密码
密码
登录
立即注册
即日起,论坛关闭新用户注册和登录,论坛相关的贴子保留查阅和下载。获得授权后,有技术问题可联系微信 13199509559 一对一解决。 2024-3-12
搜索
本版
帖子
用户
请
登录
后使用快捷导航
没有帐号?
立即注册
设置
退出
免费PHP万能建站系统_社区团购SaaS_商城系统_软件开发_虚拟币交易所系统_矿机系统_微信钻石投票系统_成品源码
»
技术问答
›
OurPHP !
›
免费技术分享
›
微信H5支付V3 POST无法传递参数的那些坑
返回列表
查看:
4628
|
回复:
1
微信H5支付V3 POST无法传递参数的那些坑
岁月无声
当前离线
积分
0
37
主题
37
主题
37
主题
超级版主
积分
0
发消息
电梯直达
1
#
岁月无声
发表于 2017-9-24 19:05:04
|
只看该作者
|
倒序浏览
|
阅读模式
碰到这个问题的朋友可以参考这个贴子
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。慢慢学习吧。
复制代码
收藏
0
回复
举报
蓝色屠龙刀
当前离线
积分
621
0
主题
0
主题
0
主题
高级会员
高级会员, 积分 621, 距离下一级还需 379 积分
高级会员, 积分 621, 距离下一级还需 379 积分
积分
621
发消息
2
#
蓝色屠龙刀
发表于 2018-3-6 12:04:41
|
只看该作者
确实不错,眼前一亮的好文
百香果果苗 百香果种植 百香果 广西百香果 批发百香果
回复
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表