微信网页支付jsapi传参问题解决(使用微信官方SDK)
来源:互联网 发布:知乎南方采暖方式 编辑:程序博客网 时间:2024/06/06 00:24
微信支付api真的是各种坑啊
今天一整天都在折腾微信支付jsapi的参数不能通过get,post方式获取的问题!!
微信网页支付在用户点击发起支付前的流程:
问题:用户h5页面输入的参数通过post 或者get的方式传递到商户后台,商户后台无法处理用户传入的参数,并生成商户订单。
原因:在创建商户订单时,需要获取到用户的openid
//①、获取用户openid$tools = new JsApiPay();$openId = $tools->GetOpenid();
public function GetOpenid(){//通过code获得openidif (!isset($_GET['code'])){//触发微信返回code码$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']); $url = $this->__CreateOauthUrlForCode($baseUrl);Header("Location: $url");exit();} else {//获取code码,以获取openid $code = $_GET['code'];$openid = $this->getOpenidFromMp($code);return $openid;}}
但是在获取用户openid的过程中需要请求CODE,CODE请求函数如下:
private function __CreateOauthUrlForCode($redirectUrl){$urlObj["appid"] = WxPayConfig::APPID;$urlObj["redirect_uri"] = "$redirectUrl";$urlObj["response_type"] = "code";$urlObj["scope"] = "snsapi_base";$urlObj["state"] = "STATE"."#wechat_redirect";$bizString = $this->ToUrlParams($urlObj);return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;}
因此,在获取openid商户后台与微信系统进行多次交互,当再次回到生成商户订单页的时候,我们之前从h5页面通过$_GET或者$_POST方式获取的参数已经被清空,所以无法生成商户订单。
解决办法:
1.先将用户h5页面提交过来的参数保存到session中,然后再重定向到要生成商户订单的页面JSpay_demo.php,例如:
/* order_demo.php */if(isset($_POST['order'])){ $_SESSION['premoney']=$_POST['premoney']; Header("Location: JSpay_demo.php"); }
2.然后在生成商户订单的页面中先获取openid,再获取session中的值,例如:
//①、获取用户openid$tools = new JsApiPay();$openId = $tools->GetOpenid();session_start();$premoney=$_SESSION['premoney'];
3.这样就可以获取到想要自定义支付订单的参数的值了,然后再调用统一下单接口。
0 0
- 微信网页支付jsapi传参问题解决(使用微信官方SDK)
- 微信JSAPI支付
- 微信 jsapi 支付
- 微信支付Jsapi支付
- 微信支付JSAPI支付
- 微信支付开发C# SDK JSAPI支付开发流程
- 微信支付V3版(JSAPI)
- 微信JSAPI支付(JAVA版)
- 微信支付(JsApi)总结
- 微信JSAPI支付教程
- c# 微信jsapi支付
- 微信jsApi支付备忘
- thinkphp微信支付-JSAPI
- 微信JSAPI支付实现
- 微信JSAPI支付接口GET不到参数问题解决
- 微信公众号开发,微信支付功能开发(网页JSAPI调用)
- jsapi h5 内网页微信支付开发
- 微信支付jsapi问号传参的问题
- 黑马程序员 —— 初识C语言及第一个C语言程序分析
- Nodejs控制权转移 next all
- lightoj 1275 - Internet Service Providers 一元二次方程
- Linux Wireless架构总结
- org.springframework.web.servlet.DispatcherServlet
- 微信网页支付jsapi传参问题解决(使用微信官方SDK)
- activity劫持反劫持
- matlab学习笔记 函数bsxfun repmat
- 菜鸟学python(10) 用python处理Layer导出的域名(将每个域名前加入http://)
- 制作网页---html拾遗
- c++中虚函数的实现机制
- bzoj 4421: [Cerc2015] Digit Division
- git 回滚到某次commit
- Android中Parcelable接口的应用