用easywechat开发微信支付功能以及红包接口调用注意事项

摘要:
[php]viewplaincopy$order=newOrder;3.接下来,在调用之前进行计算。[php]viewplaincopy$app=newApplication;$付款=$app-˃payment;//统一订购$result=$payment-˃prepare//这里的订单是从上一步获得的。}$config=$payment-˃configForJSSDKPayment;//此方法用于获取js中支付所需的参数。[php]viewplaincopy$app=newApplication;$js=$app-˃js;//这是jssdk中需要在页面上使用的js参数信息。[php]viewplaincopywx.config。

红包接口调用:

在使用红包请求功能的时候,注意mch_billno(商户订单号)这个参数;

商户订单号(每个订单号必须唯一)

组成: mch_id+yyyymmdd+10位一天内不能重复的数字。

微信支付:

用easywechat来开发微信支付功能,步骤如下:

一,需要有一个商品下单页面,页面上有你的商品的信息,还要有购买数量,和一个购买按钮。

        用户在这个页面浏览商品信息的时候,可以选择购买的数量,然后点击提交进入下一个页面。

       (这个页面,跟淘宝的商品购买页面一样。)

二,创建一个页面,接收上面一步提交来的数据,然后做如下计算 。

       1,根据商品ID或是提交来的商品信息,生成商品的参数数组。

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $product = [  
  2.     'trade_type'       => 'JSAPI', // 微信公众号支付填JSAPI  
  3.     'body'             => '一盒火柴',  
  4.     'detail'           => '一盒火柴',  
  5.     'out_trade_no'     => 'MYERPORDERID12345678', // 这是自己ERP系统里的订单ID,不重复就行。  
  6.     'total_fee'        => 8888, // 金额,这里的8888分人民币。单位只能是分。  
  7.     'notify_url'       => 'http://www.xxx.com/order_notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址  (填写发起支付请求的网址)
  8.     'openid'           => 'you-open-id', // 这个不能少,少了要报错。  
  9.     // ...  基本上这些参数就够了,或者参考微信文档自行添加删除。  
  10. ];  


        2,接下来,生成商品对象。

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $order = new Order($product);  


        3,再接下来,要进行调用前计算了。

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $app = new Application(config('wechat'));  
  2. $payment = $app->payment;  
  3. //统一下单(像公众号支付、扫码支付、APP支付都使用这个接口)
  4. $result = $payment->prepare($order); // 这里的order是上面一步得来的。 这个prepare()帮你计算了校验码,帮你获取了prepareId.省心。
  5. //刷卡支付使用下面这个接口:
  6. //$result = $payment->pay($order);
  7. $prepayId = null;  
  8. if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){  
  9.     $prepayId = $result->prepay_id; // 这个很重要。有了这个才能调用支付。  
  10. else {  
  11.     var_dump($result);  
  12.     die("出错了。");  // 出错就说出来,不然还能怎样?  
  13. }  
  14. $config = $payment->configForJSSDKPayment($prepayId); // 这个方法是取得js里支付所必须的参数用的。 没这个啥也做不了,除非你自己把js的参数生成一遍  

        4,就快进入正题,但是,还没完。还要取得一个数据。

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $app = new Application(config('wechat'));  
  2. $js = $app->js;  // 这个是jssdk里页面上需要用到的js参数信息。  



        5,上面获得的$js 和 $config数据,要在页面里显示出来。

                注意,上面几步都不涉及显示,只是在生成页面显示所需要的数据。

                现在才需要把这些显示在页面上。

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>  
    1. <script type="text/javascript" charset="utf-8">  
    2.     wx.config({{ $js->config(array('chooseWXPay')) }});  
    3. </script>
  2. <script>  
  3.     $(function(){  
  4.   
  5.         $(".btn-do-it").click(function(){  
  6.             wx.chooseWXPay({  
  7.                 timestamp: "{{$config['timestamp']}}", // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符  
  8.                 nonceStr: '{{$config['nonceStr']}}', // 支付签名随机串,不长于 32 位  
  9.                 package: '{{$config['package']}}', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)  
  10.                 signType: '{{$config['signType']}}', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
  11.                 paySign: '{{$config['paySign']}}', // 支付签名  
  12.                 success: function (res) {  
  13.                     // 支付成功后的回调函数  
  14.                     if(res.err_msg == "get_brand_wcpay_request:ok" ) {  
  15.                         alert('支付成功。');  
  16.                         window.location.href="{{url("wechat/pay_ok")}}";  
  17.                     }else{  
  18.                         //alert(res.errMsg);  
  19.                         alert("支付失败,请返回重试。");  
  20.                     }  
  21.                 },  
  22.                 fail: function (res) {  
  23.                     alert("支付失败,请返回重试。");  
  24.                 }  
  25.             });  
  26.         });  
  27.     });  
  28. </script>  


        没错,只需要修改这些。

        再来理一个,第二步里,这个页面需要显示一个确认信息,比如商品的名称,和支付的总金额。

        页面上应该有一个按钮,用来触发支付(.btn-do-it)。

        页面里的js就是第5步里要显示的内容。

        总结:

        第一步,商品信息页面,用户选择购买数据,点购买,提交到第二步的确认页面。

        第二步的确认页面,根据商品信息,和微信配置信息,生成必要的支付数据,并显示购买确认信息,和一个支付按钮,

        用户点击支付按钮,发起支付。

        支付完成,提示用户,或转到相应页面。

        微信的开发团队提醒我们,请以微信的推送信息为准来处理订单,不然有可能人财两空。

product.html

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>一盒火柴</title>  
  6. </head>  
  7. <body>  
  8.   
  9. <h1>一盒火柴</h1>  
  10.   
  11. <div>  
  12.     卖火柴的小女孩,手里有一堆火柴。  
  13. </div>  
  14.   
  15. <hr>  
  16.   
  17. <div>  
  18.     <form name="form1" action="payment.php" method="post">  
  19.         <lable>数量:</lable>  
  20.         <input name="qty" value="1" />  
  21.         <input name="submit" type="submit" value="购买" />  
  22.     </form>  
  23. </div>  
  24.   
  25. </body>  
  26. </html>  



payment.php

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2. use EasyWeChatFoundationApplication;  
  3. use EasyWeChatPaymentOrder;  
  4.   
  5. $product = [  
  6.     'body'             => '一盒火柴',  
  7.     'trade_type'       => 'JSAPI',  
  8.     'out_trade_no'     => 'ERP'.time(),  
  9.     'total_fee'        => 1,  
  10.     'notify_url'       => 'http://test.xxoo.com/wechat/notify/',  
  11.     'openid'           => $_SESSION['openid'],  
  12.     'attach'           => '卖火柴的小女孩',  
  13. ];  
  14.   
  15. $order = new Order($product);  
  16.   
  17. $app = new Application(config('wechat'));  
  18. $js = $app->js;  
  19. $payment = $app->payment;  
  20. $result = $payment->prepare($order);  
  21. $prepayId = null;  
  22. if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){  
  23.     $prepayId = $result->prepay_id;  
  24. else {  
  25.     var_dump($result);  
  26.     die("出错了。");  
  27. }  
  28. $config = $payment->configForJSSDKPayment($prepayId);  
  29. ?>  
  30. <!DOCTYPE html>  
  31. <html lang="en">  
  32. <head>  
  33.     <meta charset="UTF-8">  
  34.     <title>购买支付</title>  
  35. </head>  
  36. <body>  
  37.   
  38. <h1>一盒火柴</h1>  
  39.   
  40. <div>  
  41.     <p>您购买了“一盒火柴”,总价格: 0.01元。</p>  
  42.     <p>数量:1盒。</p>  
  43. </div>  
  44.   
  45. <hr>  
  46.   
  47. <div>  
  48.     <input name="button" id="btnPay" type="button" value="支付" />  
  49. </div>  
  50.   
  51.   
  52.   
  53.   
  54. <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>  
  55. <script type="text/javascript" charset="utf-8">  
  56.     wx.config({{ $js->config(array('chooseWXPay')) }});  
  57. </script>  
  58. <script>  
  59.     $(function(){  
  60.   
  61.         $(".btn-do-it").click(function(){  
  62.             wx.chooseWXPay({  
  63.                 timestamp: "{{$config['timestamp']}}", // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符  
  64.                 nonceStr: '{{$config['nonceStr']}}', // 支付签名随机串,不长于 32 位  
  65.                 package: '{{$config['package']}}', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)  
  66.                 signType: '{{$config['signType']}}', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
  67.                 paySign: '{{$config['paySign']}}', // 支付签名  
  68.                 success: function (res) {  
  69.                     // 支付成功后的回调函数  
  70.                     if(res.err_msg == "get_brand_wcpay_request:ok" ) {  
  71.                         alert('支付成功。');  
  72.                         window.location.href="{{url("wechat/pay_ok")}}";  
  73.                     }else{  
  74.                         //alert(res.errMsg);  
  75.                         alert("支付失败,请返回重试。");  
  76.                     }  
  77.                 },  
  78.                 fail: function (res) {  
  79.                     alert("支付失败,请返回重试。");  
  80.                 }  
  81.             });  
  82.         });  
  83.     });  
  84. </script>  
  85. </body>  
  86. </html>  



这些是伪代码,payment.php并没有对product.html传来的商品信息做处理。

其实只要看payment.php文件应该知道怎么做了。

其它就两点。a,获取$config,b, 自己写wx.chooseWXPay。

其它的看easywechat文档就行了。

免责声明:文章转载自《用easywechat开发微信支付功能以及红包接口调用注意事项》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决mongodb的安装mongod命令不是内部或外部命令丝杠推力计算器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python解析Pcap包类源码学习

0x1、前言 ​ 在现场取证遇到分析流量包的情况会比较少,虽然流量类设备原理是把数据都抓出来进行解析,很大一定程度上已经把人可以做的事情交给了机器自动完成。 ​ 可用于PCAP包分析的软件比如科来,Wireshark都是很好用的分析软件,找Pcap解析的编程类代码时发现已经有很多大佬写过Python脚本辅助解析Pcap,也有提取将Pcap信息以界面形式展示...

用js小类库获取浏览器的高度和宽度信息

在做项目时碰到了要在页面上显示一个浮动DIV层的效果。本来做的是在页面居中时显示的,但后来经过自己的测试发现,当网页中出现了滚动条之后,那个浮动的DIV却还是在页面的顶部显示的。因此当用户在一个较长内容的网页中点击某一个按钮显示DIV层会发现没有任何效果(其实已经在页面的顶部显示了),因此,我们需要准备的知道用户当前的浏览的位置的信息。在实现这个要求之前,...

【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法。它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...) 在callS...

js 实现数组数字奇偶归类

如:[1,2,3,4,5,6,7,8] => [1,7,3,5,4,6,2,8],讲奇数放在数组前面部分,偶数放在数组后面部分。 实现方法一: var a = [1,2,3,4,5,6,7,8]; a.sort(function(x){ if(x % 2 === 0) return 1; }); 实现方法二: var a = [1,2,3,4...

Git查看与修改用户名、邮箱

用户名和邮箱的作用:   用户名和邮箱地址相当于你的身份标识,是本地Git客户端的一个变量,不会随着Git库而改变。   每次commit都会用用户名和邮箱纪录。   github的contributions跟你的邮箱是有关联的。 查看自己的用户名和邮箱地址:   $ git config user.name   $ git config user.ema...

SpringCloud入门之常用的配置文件 application.yml和 bootstrap.yml区别

SpringBoot默认支持properties和YAML两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。SpringBoot支持自动加载约定名称的配置文件,例如application.yml。如果是自定义名称的配置文件,就要另找方法了。可惜的是,不像前者有@PropertySource这样方便的加载方式,后者的...