用easywechat開發微信支付功能以及紅包接口調用注意事項

紅包接口調用:javascript

在使用紅包請求功能的時候,注意mch_billno(商戶訂單號)這個參數;php

商戶訂單號(每一個訂單號必須惟一)html

組成: mch_id+yyyymmdd+10位一天內不能重複的數字。java

微信支付:數組

用easywechat來開發微信支付功能,步驟以下:微信

 

一,須要有一個商品下單頁面,頁面上有你的商品的信息,還要有購買數量,和一個購買按鈕。微信開發

        用戶在這個頁面瀏覽商品信息的時候,能夠選擇購買的數量,而後點擊提交進入下一個頁面。app

       (這個頁面,跟淘寶的商品購買頁面同樣。)函數

 

二,建立一個頁面,接收上面一步提交來的數據,而後作以下計算 。post

 

       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文檔就好了。

相關文章
相關標籤/搜索