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

微信JS动态支付,自定义金额支付教程(微信那些坑)

222

主题

222

主题

222

主题

管理员

Rank: 9Rank: 9Rank: 9

积分
0
跳转到指定楼层
1#
admin 发表于 2019-9-13 14:38:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原创:
微信操你大爷,流程反锁不说,还处处是坑
首先你申请了微信支付,利用JSAPI来实现动态支付。 什么是动态支付,例如:用户自定义输入付款金额或指定的付款金额。
案例交话费金额为 50  100  200等

微信的SDK给的代码  金额这一块是写死的。PHP和JS都在一个文件中。那么我们要做的是 把PHP和JS分开

一,JS为前端调用微信支付
二,PHP来处理微信验证,如 OPENID等

这里需要二开微信的几个文件,1.jspai.php  2. WxPay.JsApiPay.php 3. WxPay.Config.php
别忘了 WxPay.Config.php  配置好你的商户信息,如果配置错误  调试起来 就会很烦麻

jspai.php 只保留 PHP的代码。。其它都删掉。

我说一下我实现的思路吧    1.前端支付页面直接获取openid -> 把openid传给jspai.php -> jspai.php把openid给WxPay.JsApiPay.php处理->jspai.php返回前端处理结果


所以,前端支付页面直接获取openid   (WxPay.JsApiPay.php 不用他这个文件获取了)
代码如下:
  1. $.post("weixinjspay/jsapi.php",{a:a,b:b,c:c,d:d,k:k},function(result){
  2.                         if(result == 'no'){
  3.                                 alert("参数出错!");
  4.                                 return false;
  5.                         }else{
  6.                                 var jsstr = $.parseJSON(result);
  7.                                 jsApiCall(jsstr);
  8.                         }
  9.                 },'json');        
复制代码


jspai.php 得到POST来的 openid后  传给WxPay.JsApiPay.php  代码如下:
  1. //①、获取用户openid
  2. $tools = new JsApiPay();
  3. $openId = $tools->GetOpenid($_POST['key']);
复制代码
  1. echo json_encode($jsApiParameters);
复制代码


修改WxPay.JsApiPay.php 2处:
  1. public function GetOpenid($diyid = '')
  2.         {
  3.                         //获取code码,以获取openid
  4.                     $code = $diyid;
  5.                         $openid = $this->getOpenidFromMp($code);
  6.                         return $openid;
  7.         }
复制代码
  1. public function GetOpenidFromMp($code)
  2.         {
  3.                
  4.                         return $code;
  5.                
  6.         }
复制代码


前端处理:
  1. function jsApiCall(result)
  2. {
  3.         WeixinJSBridge.invoke(
  4.                 'getBrandWCPayRequest',
  5.                 {
  6.              "appId": result.appId,
  7.              "nonceStr": result.nonceStr,
  8.              "package": result.package,
  9.              "paySign": result.paySign,
  10.              "signType": result.signType,
  11.              "timeStamp": result.timeStamp
  12.          },
  13.                 function(res){
  14.                         WeixinJSBridge.log(res.err_msg);
  15.                         /*alert(res.err_code+res.err_desc+res.err_msg);*/
  16.                         if(res.err_msg == "get_brand_wcpay_request:ok"){
  17.                                 /*支付成功*/

  18.                         }else if(res.err_msg == "get_brand_wcpay_request:cancel"){
  19.                                 /*用户取消*/                                
  20.                                 alert("用户取消!");
  21.                                  
  22.                         }else{  
  23.                                 /*支付失败*/                                
  24.                                 alert("支付失败!");
  25.                                 
  26.                         }
  27.                 }
  28.         );
  29. }
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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