作為一個後端開發人員來說,微信開發已經是必備的技能之一了,今天小編就來分享一個相關的類庫shenghui0779/gochat(以下簡稱wechat)。這個類庫簡單易用,看原始碼的時候目錄結構一目了然,可以看出作者的思路很清晰,功能也挺豐富日常開發來絕對夠用。下面跟著小編的節湊來一探究竟吧。
目錄結構mch: 商戶平臺相關業務, 下單、支付、退款、查詢、委託代扣、企業付款、企業紅包 等mp:小程式端相關業務, 小程式授權、使用者資料解析、訊息傳送、二維碼生成、訊息 等pub:公眾號相關業務, 網頁授權、選單、模板訊息、訊息回覆、使用者管理、訊息轉客服 等wechat.go 包的入口,獲取以上三個業務的例項一、支付下單用法
import ( "github.com/iiinsomnia/gochat" "github.com/iiinsomnia/gochat/mch")// UnifiedOrder 統一下單資料 直接引用包裡的結構體即可type UnifiedOrder struct {\t// 必填引數\tOutTradeNO string // 商戶系統內部的訂單號,32個字元內、可包含字母,其他說明見商戶訂單號\tTotalFee int // 訂單總金額,單位為分,詳見支付金額\tSpbillCreateIP string // APP和網頁支付提交使用者端ip,Native支付填呼叫微信支付API的機器IP\tTradeType string // 取值如下:JSAPI,NATIVE,APP,MWEB,詳細說明見引數規定\tBody string // 商品或支付單簡要描述\tNotifyURL string // 接收微信支付非同步通知回撥地址,通知url必須為直接可訪問的url,不能攜帶引數\t// 選填引數\tDeviceInfo string // 終端裝置號(門店號或收銀裝置ID),注意:PC網頁或公眾號內支付請傳"WEB"\tDetail string // 商品名稱明細列表\tAttach string // 附加資料,在查詢API和支付通知中原樣返回,該欄位主要用於商戶攜帶訂單的自定義資料\tFeeType string // 符合ISO 4217標準的三位字母程式碼,預設人民幣:CNY,其他值列表詳見貨幣型別\tTimeStart string // 訂單生成時間,格式為yyyyMMddHHmmss,如:2009年12月25日9點10分10秒 表示為:20091225091010\tTimeExpire string // 訂單失效時間,格式為yyyyMMddHHmmss,如:2009年12月27日9點10分10秒 表示為:20091227091010\tGoodsTag string // 商品標記,代金券或立減優惠功能的引數,說明詳見代金券或立減優惠\tProductID string // trade_type=NATIVE,此引數必傳。此id為二維碼中包含的商品ID,商戶自行定義\tLimitPay string // no_credit--指定不能使用信用卡支付\tOpenID string // trade_type=JSAPI,此引數必傳,使用者在商戶appid下的唯一標識\tReceipt bool // 是否在支付成功訊息和支付詳情頁中出現開票入口,注:需要在微信支付商戶平臺或微信公眾平臺開通電子發票功能\tSceneInfo string // 該欄位用於上報支付的場景資訊}// 初始化例項wxmch := gochat.NewWXMch(appid, apikey, cert)r, err := wxmch.Order().Unify(order)if err != nil { // 錯誤處理...}if r["result_code"] != mch.ResultSuccess { // 判斷微信的返回狀態碼,失敗處理...}// 成功邏輯處理...// 拿到預支付的idprepayID := r["prepay_id"]// 獲取支付簽名的票據,返回給前端和app就能拉取支付介面了// APPdata := wxmch.APPAPI(prepayID)// JSdata := wxmch.JSAPI(prepayID)
查詢訂單狀態
// RefundData 退款資料type RefundData struct {\t// 必填引數\tOutRefundNO string // 商戶系統內部的退款單號,商戶系統內部唯一,同一退款單號多次請求只退一筆\tTotalFee int // 訂單總金額,單位為分,只能為整數,詳見支付金額\tRefundFee int // 退款總金額,訂單總金額,單位為分,只能為整數,詳見支付金額\t// 選填引數\tRefundFeeType string // 貨幣型別,符合ISO 4217標準的三位字母程式碼,預設人民幣:CNY,其他值列表詳見貨幣型別\tRefundDesc string // 若商戶傳入,會在下發給使用者的退款訊息中體現退款原因\tRefundAccount string // 退款資金來源,僅針對老資金流商戶使用\tNotifyURL string // 非同步接收微信支付退款結果通知的回撥地址,通知URL必須為網路可訪問的url,不允許帶引數}// 根據微信訂單號查詢r, err := wxmch.Order().QueryByTransactionID(transactionID)// 根據商戶訂單號查詢r, err := wxmch.Order().QueryByOutTradeNO(transactionID)// 關閉訂單r, err := wxmch.Order().Close(outTradeNO)
退款
// 根據微信訂單號退款r, err := wxmch.Refund().RefundByTransactionID(transactionID, refundData)if err != nil { // 錯誤處理...}if r["result_code"] != mch.ResultSuccess { // 失敗處理...}// 成功邏輯處理...// 根據商戶訂單號退款r, err := wxmch.Refund().RefundByOutTradeNO(outTradeNO, refundData)if err != nil { // 錯誤處理...}if r["result_code"] != mch.ResultSuccess { // 失敗處理...}// 成功邏輯處理...
小程式登入授權
import ( "github.com/iiinsomnia/gochat" "github.com/iiinsomnia/gochat/mp" "github.com/iiinsomnia/gochat/utils")// 初始化小程式例項wxmp := gochat.NewWXMP(appid, appsecret)// 授權 session, err := wxmp.Sns().Code2Session(code)// 資料校驗解密// 資料簽名校驗if signature != utils.SHA1(rawData+sessionKey) { return errors.New("簽名校驗失敗")}// 資料解密bizDataCrypt := wxmp.BizDataCrypt(encryptedData, sessionKey, iv)if err := bizDataCrypt.Decrypt(); err != nil { return err}// 解密後取使用者資訊bizData, err := bizDataCrypt.GetUserData()if err != nil { return err}
獲取access_token
accessToken, err := wxmp.CgiBin().GetAccessToken()if err != nil { return err}// TODO: 儲存 access_token ...
公眾號因 access_token 每日獲取次數有限且含有效期,故服務端應妥善儲存 access_token 並定時重新整理
// 獲取公眾號例項pub := gochat.NewWXPub(accountid, appid, appsecret, signToken, encodingAESKey)
整個包看下來還是蠻簡單,使用方便。想要了解更多內容可以去檢視作者的原始碼和使用說明。
地址: https://github.com/shenghui0779/gochat/wiki
最新評論