1. 程式人生 > >微信公眾平臺開發[4] —— ThinkPHP 框架下微信支付

微信公眾平臺開發[4] —— ThinkPHP 框架下微信支付

    提示:文章佈局尷尬症患者,請轉移>>>MarkDown文章連結 <<<

    宣告:原文主要摘自白俊遙部落格 ,部分內容針對個人事例已作修改,主要用於自己的參考,歡迎指正。

    注意:微信公眾號支付,強烈建議使用外網可訪問的連結測試,否則即便程式碼正確也無法調出支付介面,可使用草料二維碼生成可掃描圖片,也可直接在微信中輸入網址。

    使用框架:ThinkPHP 3.2.3

一.微信公眾平臺資訊配置

1).進入微信公眾平臺

由左側的“微信支付”進入配置介面,新增或修改正確的支付授權目錄,注意該目錄的要求,多建議精確到上一級目錄,並加斜線 /

2).授權域名

注意】

    域名的確定都是工信部備案過的,初次開發的很容易漏掉“www”,而截圖中不加“www”是因為我們備案的原因,記得只去掉“http://”。


二.ThinkPHP 框架,相應程式碼配置

    公眾號支付->場景參考

1).Weixinpay.php檔案處理

    匯入 Weixinpay.php檔案到“/ThinkPHP/Library/Vendor/Weixinpay/”目錄下

    

    2).配置

    在專案的配置檔案中,新增類此如下的程式碼,,其中的值需要自己根據實際公眾號的資訊進行配置
注意     很多人會搞錯MCHID而造成不必要的時間浪費,具體開發參照官方文件。

/Application/Common/Conf/config.php


    3).支付函式的編輯

     即進行點選支付後的介面,其自動呼叫微信的預設支付框架。

【注意】

    進行支付邏輯的處理,一定要記住,要求使用GET方式請求此頁面,即使用 get 方式將總金額、訂單號提交過來進行處理,$data 可以接收

    

4).getParameters修改

    上述檔案,需要修改其中的 getParameters()方法,其中標記的位置,是根據實際的業務情況而從資料庫獲取的。具體程式碼後面會有提供。

5).上述函式,需要html的配合:/M/View/Cart/pay.html

    

    6).回撥函式的編輯

【注意】

    該路徑必須要與配置檔案中的回撥路徑一致,此回撥函式,是根據微信是否真正完成支付後的資料更新,一般此處進行訂單狀態的修改,比如,我在此處非同步執行的是將訂單號的支付狀態引數由0置為1.

    [個人測試發現,此處 session 和 cookie 的設定都失效,僅做參考]


【注意】:     先前發現,因為微信服務的設計,會多次回撥 notify()以判斷是否真正的支付成功,而簡單的update 操作是無法檢測的,為了同自己的平臺相關聯,同理需要進行狀態的判斷,否則不可避免的會多次執行 notify_wx()中的邏輯處理

    7).如果是整合到自己的專案中

        需要在自己的公共函式中增加 curl_get_contents

    8).補充:

    (1).提醒:所提供的原始碼,剝離出了微信支付的核心,注意html頁面中對jquery.js的正確引用,pay.html基本是從微信公眾號官網直接下載的demo頁,同時使用程式碼前請配置微信支付url,且外網測試。

三.微信掃碼支付

1).場景分析

>場景參考

>一般的網站開發中,如果是手機端,多數使用上面提到的公眾號支付方式,而掃碼支付多數出現在PC端,當然也有部分手機網站有生成二維碼的需求,但是由於微信瀏覽器的識別限制,一種情況是直接在微信端瀏覽的購物網站,通過長按二維碼就可以識別;另一種情況是在另外的手機端瀏覽器,比如百度、頭條。
>如此一來除非用另一部手機進行掃碼支付,或者將二維碼截圖儲存後,再到微信中找到圖片進行長按識別。顯然後者用法過於繁瑣,所以處分針對於微信瀏覽器開發,否則不建議使用掃碼支付功能,而在PC端開發則適合使用該功能

2).功能開發

通用上文中介紹的功能開發步驟 1)、2)、3)、6)、7)

3).補充函式

在 common/function.php 中補充函式 weixinpay()和 qrcode()

4).設計顯示微信掃碼的頁面

    我定的頁面為 M/Order/mobilepayment.html,即通過訪問 Order/wechatpaymenter ,同時呼叫微信生成二維碼,在該頁面的 <img> 標籤中顯示出來,具體程式碼見後面的附錄

5).補充 wechatpaymenter 方法。


6).注意:

    模式二生成的二維碼也是有時間限制的,同時,不能有許可權攔截,並且,二維碼的生成是根據訂單號唯一確定的,如果生成一次,那麼很可能第二次就不顯示,建議可用 time()代替測試。

7).執行結果截圖

在資訊配置正確的情況下,功能結果如圖所示

四.附錄

2.提醒:

  注意微信配置的正確性,如果有誤,微信支付會有報錯,二維碼則會無法生成.多參考官方文件加深理解也是不錯的選擇。