<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          wechat-gogolang 版本微信 SDK

          聯(lián)合創(chuàng)作 · 2023-09-24 14:18

          wechat-go 是一個簡潔、高效的 golang 版本微信 SDK,支持微信應(yīng)用和商戶。

          設(shè)計(jì)目標(biāo)

          在概念清晰的基礎(chǔ)上追求更少的編碼、更開放、靈活的結(jié)構(gòu)。

          本庫不是在微信官方API基礎(chǔ)上進(jìn)一步封裝,造出一個新的框架級的重體量SDK。而是努力成為微信官方文檔的Golang版快速工具箱。

          努力讓開發(fā)者在學(xué)習(xí)微信官方文檔后,不再有新的學(xué)習(xí)曲線(另學(xué)一套)!

          所以本庫目標(biāo)是:極致、簡單!不創(chuàng)另行發(fā)明新理念、不另行創(chuàng)造新架構(gòu)!

          概述

          根據(jù)微信的文檔,微信的業(yè)務(wù)有兩個不同的領(lǐng)域:

          • 應(yīng)用類賬號下的Api
          • 商戶類賬號下的Api

          安裝

          go get github.com/blusewang/wechat
          

          應(yīng)用賬號API

          訂閱號服務(wù)號小程序App

          •  支持連接不同的地區(qū)的微信服務(wù)器
          •  支持一行代碼從被動消息的 http.Request 中安全取出消息成MessageData。內(nèi)部實(shí)現(xiàn)了識別并解密消息、校驗(yàn)請求的Query數(shù)據(jù)。
          •  支持自動填充Query中的access_token數(shù)據(jù)。
          •  鏈?zhǔn)秸{(diào)用,讓不同需求的業(yè)務(wù)能一氣和成!

          時效性憑證安置方式約定

          access_tokenjs_sdk_ticket 這類需要每7200秒刷新一次的,放到crontab中。

          對此不滿的,完全可以在使用本庫的基礎(chǔ)上,采用自己熟悉的方式、甚至自己設(shè)計(jì)方案來替代crontab

          核心設(shè)計(jì)

          算法

          一個基礎(chǔ)賬號對象MpAccount,它有三個行為:

          • 為微信H5的網(wǎng)址簽名 UrlSign(url string)
          • 讀取被動消息通知 ReadMessage(req *http.Request)
          • 主動發(fā)出請求 NewMpReq(path mp_api.MpApi) *mpReq

          數(shù)據(jù)結(jié)構(gòu)

          只實(shí)現(xiàn)了很有限的數(shù)據(jù)。若需要使用本庫自帶的數(shù)據(jù)結(jié)構(gòu)之外的API。完全可以參考本庫的數(shù)據(jù)結(jié)構(gòu)寫法,自行另起書寫(注意不同業(yè)務(wù)的tag名稱不同)。 并能得到一樣的兼容體驗(yàn)!

          舉例

          	a := MpAccount{
          		AppId:       "your_app_id",
          		AccessToken: "38_XtyPcVUODHd8q3TNYPVGAZ2WNRx_nW4gnclObbv78tsEa1Y_bwdkLALDMEb4372wYqcC_CanjU9O0Zw4MqHiqxrIukk_G4ElAUxyv_ASOb0V2y8647cbxbYU-G8CbtnPdLNub8NrqtUVrSTnWAPaAGALPE",
                  // ...
          		ServerHost:  mp_api.ServerHostShangHai, // 選擇離自己最近的服務(wù)主機(jī)
          	}
          
              // 一個簡單的只帶access_token的GET API
          	var list mp_api.MessageCustomServiceKfListRes
          	if err := a.NewMpReq(mp_api.MessageCustomServiceKfList).Bind(&list).Do(); err != nil {
          		t.Error(err)
          	}
          	log.Println(list)
          
              // 一個POST API
          	var rs mp_api.AccountShortUrlRes
          	err = a.NewMpReq(mp_api.AccountShortUrl).SendData(mp_api.AccountShortUrlData{
          		Action:  mp_api.ShortUrlAction,
          		LongUrl: "https://developers.weixin.qq.com/doc/offiaccount/Account_Management/URL_Shortener.html",
          	}).Bind(&rs).Do()
          	if err != nil {
          		t.Error(err)
          	}
          	log.Println(rs)
          
              // 一個上傳媒體文件的API
          	err = a.NewMpReq(mp_api.MessageCustomServiceKfAccountUploadHeadImg).Query(mp_api.MessageCustomServiceKfAccountUploadHeadImgQuery{
          		KfAccount: "1@1",
          	}).Upload(resp.Body, "png")
          	if err != nil {
          		t.Error(err)
          	}

          商戶賬號API(V2版)

          App、JSAPI、小程序下單 分賬 付款至微信零錢 付款至個人銀行卡 發(fā)紅包

          •  自動填充基礎(chǔ)信息
          •  自動簽名
          •  私有證書HTTP客戶端自動緩存
          •  支持MD5HMAC-SHA256加密
          •  支持付款至銀行卡時,隱私信息加密

          核心設(shè)計(jì)

          算法

          一個基礎(chǔ)賬號對象MchAccount,它有以下行為:

          • 創(chuàng)建請求 NewMchReq(url string)
          • 將訂單簽名給App OrderSign4App(or mch_api.PayUnifiedOrderRes)
          • 將訂單簽名給于H5、小程序 OrderSign(or mch_api.PayUnifiedOrderRes)
          • 驗(yàn)證支付成功通知 PayNotify(pn mch_api.PayNotify)
          • 付款至銀行卡時,隱私信息項(xiàng)加密 RsaEncrypt(plain string)

          數(shù)據(jù)結(jié)構(gòu)

          只實(shí)現(xiàn)了很有限的數(shù)據(jù)。若需要使用本庫自帶的數(shù)據(jù)結(jié)構(gòu)之外的API。完全可以參考本庫的數(shù)據(jù)結(jié)構(gòu)寫法,自行另起書寫(建議參考structs.go中的方式書寫)。 能得到一樣的兼容體驗(yàn)!

          舉例

              mch := MchAccount{}
              
          	var data mch_api.PayProfitSharingRes
          	var body = mch_api.PayProfitSharingData{
          		TransactionId: "4200000531202004307536721907",
          		OutOrderNo:    "TSF_216144_1065_ye7DvHdSed",
          	}
          	_ = body.SerReceivers([]mch_api.PayProfitSharingReceiver{
          		{
          			Type:        "",
          			Account:     "",
          			Amount:      10,
          			Description: "",
          		},
          	})
          
          	err := mch.NewMchReq(mch_api.PayProfitSharing).
          		Send(&body). // 注意:發(fā)送的數(shù)據(jù)需傳指針,以便自動填充基礎(chǔ)信息和簽名
          		UseHMacSign(). // 指定使用HMAC-SHA256
          		UsePrivateCert(). // 指定使用私有證書通信
          		Bind(&data).Do() // 傳指針
          	log.Println(err)
          	log.Println(data)

          為微信業(yè)務(wù)數(shù)據(jù)提供的額外工具方法

          • NewRandStr 生成符合微信要求隨機(jī)字符
          • LimitString 限制長度,并將微信不支持的字符替換成'x',能滿足公眾號App的字符要求
          • SafeString 安全地限制長度,并將微信不支持的字符替換成'x',能滿足商戶平臺的字符要求
          瀏覽 24
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕在线观看国产 | 天天人人摸 | 加勒比很很操免费视频 | 家庭乱伦AV | 中文精品欧美无线码一区 |