wxApi

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 22, 2020 License: MIT Imports: 30 Imported by: 0

README

wxApi-go

针对golang设计的微信Api接口,涵盖公众号、小程序、App、商户。 支持下单、notify验证、公对私打款至银行卡等

根据微信的业务特征,分为两部分:

  • 应用类账号下的Api
  • 商户类账号下的Api

安装

go get github.com/blusewang/wxApi-go

应用账号API

订阅号服务号小程序App

  • 支持连接不同的地区的微信服务器
  • 支持一行代码从被动消息的 http.Request 中安全取出消息成MessageData。内部实现了识别并解密消息、校验请求的Query数据。
  • 支持自动填充Query中的access_token数据。
  • 链式调用,让不同需求的业务能一气和成!

时效性凭证安置方式约定

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

核心设计

算法

一个基础账号对象MpAccount,它有三个行为:

  • 为微信H5的网址签名 UrlSign(url string)
  • 读取被动消息通知 ReadMessage(req *http.Request)
  • 主动发出请求 NewMpReq(path mp_api.MpApi) *mpReq
数据结构

只实现了很有限的数据。若需要使用本库自带的数据结构之外的API。完全可以参考本库的数据结构写法,自行另起书写(注意不同业务的tag名称不同)。 并能得到一样的兼容体验!

举例

	a := MpAccount{
		AppId:       "your_app_id",
		AccessToken: "38_XtyPcVUODHd8q3TNYPVGAZ2WNRx_nW4gnclObbv78tsEa1Y_bwdkLALDMEb4372wYqcC_CanjU9O0Zw4MqHiqxrIukk_G4ElAUxyv_ASOb0V2y8647cbxbYU-G8CbtnPdLNub8NrqtUVrSTnWAPaAGALPE",
        // ...
		ServerHost:  mp_api.ServerHostShangHai, // 选择离自己最近的服务主机
	}

    // 一个简单的只带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、小程序下单 分账 付款至微信零钱 付款至个人银行卡 发红包

  • 自动填充基础信息
  • 自动签名
  • 私有证书HTTP客户端自动缓存
  • 支持MD5HMAC-SHA256加密
  • 支持付款至银行卡时,隐私信息加密

核心设计

算法

一个基础账号对象MchAccount,它有以下行为:

  • 创建请求 NewMchReq(url string)
  • 将订单签名给App OrderSign4App(or mch_api.PayUnifiedOrderRes)
  • 将订单签名给于H5、小程序 OrderSign(or mch_api.PayUnifiedOrderRes)
  • 验证支付成功通知 PayNotify(pn mch_api.PayNotify)
  • 付款至银行卡时,隐私信息项加密 RsaEncrypt(plain string)
数据结构

只实现了很有限的数据。若需要使用本库自带的数据结构之外的API。完全可以参考本库的数据结构写法,自行另起书写(建议参考structs.go中的方式书写)。 能得到一样的兼容体验!

举例

    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). // 注意:发送的数据需传指针,以便自动填充基础信息和签名
		UseHMacSign(). // 指定使用HMAC-SHA256
		UsePrivateCert(). // 指定使用私有证书通信
		Bind(&data).Do() // 传指针
	log.Println(err)
	log.Println(data)

为微信业务数据提供的额外工具方法

  • NewRandStr 生成符合微信要求随机字符
  • LimitString 限制长度,并将微信不支持的字符替换成'x',能满足公众号App的字符要求
  • SafeString 安全地限制长度,并将微信不支持的字符替换成'x',能满足商户平台的字符要求

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LimitString

func LimitString(str string, length int) string

限制长度,并将微信不支持的字符替换成'x',能满足公众号App的字符要求

func NewRandStr

func NewRandStr(length int) string

生成符合微信要求随机字符

func SafeString

func SafeString(str string, length int) string

安全地限制长度,并将微信不支持的字符替换成'x',能满足商户平台的字符要求

Types

type H

type H map[string]interface{}

type MchAccount

type MchAccount struct {
	MchId           string
	MchName         string
	MchKey          string
	MchSSLCert      []byte // 私有加密传输时的证书
	MchSSLKey       []byte // 私有加密传输时的密钥
	MchRSAPublicKey []byte // 加密银行卡信息时用的公钥
}

商户账号

func (MchAccount) NewMchReq

func (ma MchAccount) NewMchReq(api mch_api.MchApi) (req *mchReq)

创建请求

func (MchAccount) NewMchReqWithApp

func (ma MchAccount) NewMchReqWithApp(api mch_api.MchApi, appId string) (req *mchReq)

创建请求

func (MchAccount) OrderSign

func (ma MchAccount) OrderSign(or mch_api.PayUnifiedOrderRes) map[string]interface{}

订单签名,适用于H5、小程序

func (MchAccount) OrderSign4App

func (ma MchAccount) OrderSign4App(or mch_api.PayUnifiedOrderRes) map[string]interface{}

订单签名给App

func (MchAccount) PayNotify

func (ma MchAccount) PayNotify(pn mch_api.PayNotify) bool

验证支付成功通知

func (MchAccount) RsaEncrypt

func (ma MchAccount) RsaEncrypt(plain string) (out string)

银行卡机要信息加密

type MpAccount

type MpAccount struct {
	AppId          string            `json:"app_id"`
	AccessToken    string            `json:"access_token"`
	AppSecret      string            `json:"app_secret"`
	PrivateToken   string            `json:"private_token"`
	EncodingAESKey string            `json:"encoding_aes_key"`
	JsSdkTicket    string            `json:"js_sdk_ticket"`
	ServerHost     mp_api.ServerHost `json:"server_host"`
}

应用账号 ServerHost 默认为:mp_api.ServerHostUniversal

func (MpAccount) NewMpReq

func (ma MpAccount) NewMpReq(path mp_api.MpApi) *mpReq

新建一个请求

func (MpAccount) ReadMessage

func (ma MpAccount) ReadMessage(req *http.Request) (msg mp_api.MessageData, err error)

读取通知消息

func (MpAccount) UrlSign

func (ma MpAccount) UrlSign(u string) (d map[string]interface{})

微信网页的网址签名

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL