微信支付
这是用Golang封装了微信的所有API接口的SDK,并自动生成和解析XML数据,包括微信支付、公众号、小程序、移动端的工具函数。
- 支持境内普通商户和境内服务商(境外和银行服务商没有条件测试)。
- 支持全局配置应用ID、商家ID等信息。
- 全部参数和返回值均使用
struct
类型传递,而不是map
类型。
1.1.1. 安装
go get -u gitee.com/cuckoopark/wechat
1.1.2. 初始化
const (
isProd = true // 生产环境或沙盒环境
isMch = false // 是否是企业模式,仅当调用企业付款时为true
serviceType = wechat.ServiceTypeNormalDomestic // 普通商户或服务商等类型
apiKey = "xxxxxxxx" // 微信支付上设置的API Key
certFilepath = "/xxx/yyy/apiclient_cert.p12" // 微信证书文件的本地路径,仅部分接口使用,如果不使用这些接口,可以传递空值
)
config := wechat.Config{
AppId: AppID,
MchId: MchID,
SubAppId: SubAppId, // 仅服务商模式有效
SubMchId: SubMchID, // 仅服务商模式有效
}
client := wechat.NewClient(isProd, isMch, serviceType, apiKey, certFilepath, config)
1.1.3. 使用
以下是通用的接口,使用上面初始化时生成的实例client
进行相应函数的调用。其中带有(*Client)
字样的接口,需要使用wechat.NewClient
创建的实例对象来调用,而不带的接口,则可以直接使用wechat.XXX
调用。
使用样例:
func Test() {
// 初始化参数
body := wechat.QueryOrderBody{}
body.OutTradeNo = "YgENQFTovdeJdFouNyy3nFVOhGD6ZvPH"
// 请求订单查询
wxRsp, err := client.QueryOrder(body)
if err != nil {
return
}
fmt.Printf("返回值: %+v\n", wxRsp)
}
注意事项:
- 参数或返回值的类型,请查看接口对应的文件,里面有
XXXBody
和XXXResponse
与之对应。 - 参数或返回值中的常量,请参照constant.go文件。
- 具体使用方法,请参照接口对应的测试文件。
微信支付
对应文件:wx_pay_xxxxxx.go
- 提交付款码支付:
(*Client) Micropay
。 - 统一下单:
(*Client) UnifiedOrder
。 - 查询订单:
(*Client) QueryOrder
。 - 关闭订单:
(*Client) CloseOrder
。 - 撤销订单:
(*Client) Reverse
。 - 申请退款:
(*Client) Refund
。 - 查询退款:
(*Client) QueryRefund
。 - 下载对账单:
(*Client) DownloadBill
。 - 交易保障(JSAPI):
(*Client) ReportJsApi
。 - 交易保障(MICROPAY):
(*Client) ReportMicropay
。 - 下载资金账单:TODO,client.DownloadFundFlow()。
- 拉取订单评价数据:TODO,client.BatchQueryComment()。
- 企业付款到零钱:
(*Client) Change
。 - 查询企业付款到零钱:
(*Client) QueryChange
。
微信支付回调
对应文件:wx_notify_xxxxxx.go
- 支付回调:
(*Client) NotifyPay
。 - 退款回调:
(*Client) NotifyRefund
。
微信公众号
对应文件:wx_service_xxxxxx.go
- 授权码查询OpenId:
(*Client) OpenIdByAuthCode
。 - 获取基础支持的AccessToken:
GetBasicAccessToken
。 - 获取用户基本信息(UnionId机制):
GetUserInfo
。 - 获取H5支付签名:
GetH5PaySign
。
微信小程序
对应文件:wx_applet_xxxxxx.go
- 获取小程序支付签名:
GetAppletPaySign
。 - 获取小程序码:
GetAppletUnlimitQrcode
。
移动端
对应文件:wx_app_xxxxxx.go
- 获取APP支付签名:
GetAppPaySign
。
1.1.4. 文档
- 微信支付文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
- 随机数生成算法:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_3
- 签名生成算法:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_3
- 交易金额:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 交易类型:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 货币类型:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 时间规则:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 时间戳:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 商户订单号:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 银行类型:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_2
- 单品优惠功能字段:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1
- 代金券或立减优惠:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=12_1
- 最新县及县以上行政区划代码:https://pay.weixin.qq.com/wiki/doc/api/download/store_adress.csv
1.1.5. 开发进度
- 境内普通商户
- 境内服务商
1.1.6. 测试方法
修改client_test.go
中的生成测试Client的代码,调整沙盒/生产环境、普通商户/服务商等选项,或者修改环境变量,来调整商户参数。
环境变量的脚本在env
文件中,修改后加载环境变量:
source env
go test
1.1.7. TODO
- 测试改为不同情境使用不同的用例。
- 继续调试境内普通商户和境内服务商的其他模块API文档。
- 选择性调试境外接口。
- 继续增加公众号和小程序相关接口。
- 移除
service
开头的文件。