zoukankan      html  css  js  c++  java
  • 用easywechat开发微信支付功能以及红包接口调用注意事项

    红包接口调用:

    在使用红包请求功能的时候,注意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文档就行了。

  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/linjunjie/p/6386164.html
Copyright © 2011-2022 走看看