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文档就行了。

  • 相关阅读:
    你喜欢使用eclipse+tomcat编程吗?!
    "ERR_GFX_D3D_INIT", GTA5-报错解决办法
    这样写JS的方式对吗?
    webui layout like desktop rich client
    2014年12月23日00:42:54——PS4
    2014年12月20日00:33:14-遮罩+进度条-extjs form.isvalid
    十分钟部署智能合约
    idea clion编译器
    parity 注记词
    go语言学习笔记
  • 原文地址:https://www.cnblogs.com/linjunjie/p/6386164.html
Copyright © 2011-2022 走看看