easywechat是神一樣的存在,。非常好用。希望大家都能轉到這上面來,。
用easywechat來開發(fā)微信支付功能,,步驟如下:
一,需要有一個商品下單頁面,,頁面上有你的商品的信息,,還要有購買數(shù)量,和一個購買按鈕,。
用戶在這個頁面瀏覽商品信息的時候,,可以選擇購買的數(shù)量,然后點擊提交進入下一個頁面,。
(這個頁面,,跟淘寶的商品購買頁面一樣。)
二,,創(chuàng)建一個頁面,,接收上面一步提交來的數(shù)據(jù),然后做如下計算 ,。
1,,根據(jù)商品ID或是提交來的商品信息,生成商品的參數(shù)數(shù)組,。
- $product = [
- 'trade_type' => 'JSAPI', // 微信公眾號支付填JSAPI
- 'body' => '一盒火柴',
- 'detail' => '一盒火些',
- 'out_trade_no' => 'MYERPORDERID12345678', // 這是自己ERP系統(tǒng)里的訂單ID,,不重復就行。
- 'total_fee' => 8888, // 金額,,這里的8888分人民幣,。單位只能是分。
- 'notify_url' => 'http://www./order_notify', // 支付結果通知網(wǎng)址,,如果不設置則會使用配置里的默認地址
- 'openid' => 'you-open-id', // 這個不能少,,少了要報錯。
- // ... 基本上這些參數(shù)就夠了,或者參考微信文檔自行添加刪除,。
- ];
2,,接下來,生成商品對象,。
- $order = new Order($product);
3,,再接下來,,要進行調(diào)用前計算了,。
- $app = new Application(config('wechat'));
- $payment = $app->payment;
- $result = $payment->prepare($order); // 這里的order是上面一步得來的。 這個prepare()幫你計算了校驗碼,,幫你獲取了prepareId.省心,。
- $prepayId = null;
- if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){
- $prepayId = $result->prepay_id; // 這個很重要。有了這個才能調(diào)用支付,。
- } else {
- var_dump($result);
- die("出錯了,。"); // 出錯就說出來,不然還能怎樣,?
- }
- $config = $payment->configForJSSDKPayment($prepayId); // 這個方法是取得js里支付所必須的參數(shù)用的,。 沒這個啥也做不了,除非你自己把js的參數(shù)生成一遍
4,,就快進入正題,,但是,還沒完,。還要取得一個數(shù)據(jù),。
- $app = new Application(config('wechat'));
- $js = $app->js; // 這個是jssdk里頁面上需要用到的js參數(shù)信息。
5,,上面獲得的$js 和 $config數(shù)據(jù),,要在頁面里顯示出來。
注意,,上面幾步都不涉及顯示,,只是在生成頁面顯示所需要的數(shù)據(jù)。
現(xiàn)在才需要把這些顯示在頁面上,。
- <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>
- <script type="text/javascript" charset="utf-8">
- wx.config({{ <span style="font-family: Arial, Helvetica, sans-serif;">$js->config(array('chooseWXPay')) </span><span style="font-family: Arial, Helvetica, sans-serif;">}}); </span>
- </script>
- <script>
- $(function(){
-
- $(".btn-do-it").click(function(){
- wx.chooseWXPay({
- timestamp: "{{$config['timestamp']}}", // 支付簽名時間戳,,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符
- nonceStr: '{{$config['nonceStr']}}', // 支付簽名隨機串,,不長于 32 位
- package: '{{$config['package']}}', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,,提交格式如:prepay_id=***)
- signType: '{{$config['signType']}}', // 簽名方式,默認為'SHA1',,使用新版支付需傳入'MD5'
- paySign: '{{$config['paySign']}}', // 支付簽名
- success: function (res) {
- // 支付成功后的回調(diào)函數(shù)
- if(res.err_msg == "get_brand_wcpay_request:ok" ) {
- alert('支付成功,。');
- window.location.href="{{url("wechat/pay_ok")}}";
- }else{
- //alert(res.errMsg);
- alert("支付失敗,請返回重試。");
- }
- },
- fail: function (res) {
- alert("支付失敗,,請返回重試,。");
- }
- });
- });
- });
- </script>
沒錯,只需要修改這些,。
再來理一個,,第二步里,這個頁面需要顯示一個確認信息,,比如商品的名稱,,和支付的總金額。
頁面上應該有一個按鈕,,用來觸發(fā)支付(.btn-do-it),。
頁面里的js就是第5步里要顯示的內(nèi)容。
總結:
第一步,,商品信息頁面,,用戶選擇購買數(shù)據(jù),點購買,,提交到第二步的確認頁面,。
第二步的確認頁面,根據(jù)商品信息,,和微信配置信息,,生成必要的支付數(shù)據(jù),并顯示購買確認信息,,和一個支付按鈕,,
用戶點擊支付按鈕,發(fā)起支付,。
支付完成,,提示用戶,或轉到相應頁面,。
微信的開發(fā)團隊提醒我們,,請以微信的推送信息為準來處理訂單,不然有可能人財兩空,。
-分隔-
product.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>一盒火柴</title>
- </head>
- <body>
-
- <h1>一盒火柴</h1>
-
- <div>
- 賣火柴的小女孩,,手里有一堆火柴。
- </div>
-
- <hr>
-
- <div>
- <form name="form1" action="payment.php" method="post">
- <lable>數(shù)量:</lable>
- <input name="qty" value="1" />
- <input name="submit" type="submit" value="購買" />
- </form>
- </div>
-
- </body>
- </html>
payment.PHP
- <?php
- use EasyWeChat\Foundation\Application;
- use EasyWeChat\Payment\Order;
-
- $product = [
- 'body' => '一盒火柴',
- 'trade_type' => 'JSAPI',
- 'out_trade_no' => 'ERP'.time(),
- 'total_fee' => 1,
- 'notify_url' => 'http://test./wechat/notify/',
- 'openid' => $_SESSION['openid'],
- 'attach' => '賣火柴的小女孩',
- ];
-
- $order = new Order($product);
-
- $app = new Application(config('wechat'));
- $js = $app->js;
- $payment = $app->payment;
- $result = $payment->prepare($order);
- $prepayId = null;
- if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){
- $prepayId = $result->prepay_id;
- } else {
- var_dump($result);
- die("出錯了,。");
- }
- $config = $payment->configForJSSDKPayment($prepayId);
- ?>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>購買支付</title>
- </head>
- <body>
-
- <h1>一盒火柴</h1>
-
- <div>
- <p>您購買了“一盒火柴”,,總價格: 0.01元。</p>
- <p>數(shù)量:1盒,。</p>
- </div>
-
- <hr>
-
- <div>
- <input name="button" id="btnPay" type="button" value="支付" />
- </div>
-
-
-
-
- <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>
- <script type="text/javascript" charset="utf-8">
- wx.config({{ $js->config(array('chooseWXPay')) }});
- </script>
- <script>
- $(function(){
-
- $(".btn-do-it").click(function(){
- wx.chooseWXPay({
- timestamp: "{{$config['timestamp']}}", // 支付簽名時間戳,,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符
- nonceStr: '{{$config['nonceStr']}}', // 支付簽名隨機串,不長于 32 位
- package: '{{$config['package']}}', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,,提交格式如:prepay_id=***)
- signType: '{{$config['signType']}}', // 簽名方式,,默認為'SHA1',使用新版支付需傳入'MD5'
- paySign: '{{$config['paySign']}}', // 支付簽名
- success: function (res) {
- // 支付成功后的回調(diào)函數(shù)
- if(res.err_msg == "get_brand_wcpay_request:ok" ) {
- alert('支付成功,。');
- window.location.href="{{url("wechat/pay_ok")}}";
- }else{
- //alert(res.errMsg);
- alert("支付失敗,,請返回重試。");
- }
- },
- fail: function (res) {
- alert("支付失敗,,請返回重試,。");
- }
- });
- });
- });
- </script>
- </body>
- </html>
這些是偽代碼,payment.php并沒有對product.html傳來的商品信息做處理,。
其實只要看payment.php文件應該知道怎么做了,。
其它就兩點。a,,獲取$config,b,, 自己寫wx.chooseWXPay,。
其它的看easywechat文檔就行了。
-END-
|