用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 EasyWeChat\Foundation\Application;  
  3. use EasyWeChat\Payment\Order;  
  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文檔就行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM