微信支付的GoLang接口封装方案
2019-08-19 本文已影响14人
爱翻身的咸鱼
这是用Golang封装了微信支付的所有API接口的SDK,并自动生成和解析XML数据。
- 支持境内普通商户和境内服务商(境外和银行服务商没有条件测试)。
- 支持全局配置应用ID、商家ID等信息。
- 全部参数和返回值均使用
struct
类型传递,而不是map
类型。
Github地址:https://github.com/cuckoopark/wechat
安装
go get -u github.com/cuckoopark/wechat
初始化
const (
isProd = 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, serviceType, apiKey, certFilepath, config)
使用
下面是通用的接口,使用上面初始化时生成的实例client
进行相应函数的调用:
- 提交付款码支付:
func (*Client) Micropay(MicropayBody) (MicropayResponse, error)
- 统一下单:
func (*Client) UnifiedOrder(UnifiedOrderBody) (UnifiedOrderResponse, error)
- 查询订单:
func (*Client) QueryOrder(QueryOrderBody) (QueryOrderResponse, error)
- 关闭订单:
func (*Client) CloseOrder(CloseOrderBody) (CloseOrderResponse, error)
- 撤销订单:
func (*Client) Reverse(ReverseBody) (ReverseResponse, error)
- 申请退款:
func (*Client) Refund(RefundBody) (RefundResponse, error)
- 查询退款:
func (*Client) QueryRefund(QueryRefundBody) (QueryRefundResponse, error)
- 下载对账单:
func (*Client) DownloadBill(DownloadBillBody) (string, *DownloadBillResponse, error)
- 交易保障(JSAPI):
func (*Client) ReportJsApi(ReportJsApiBody) (ReportJsApiResponse, error)
- 交易保障(MICROPAY):
func (*Client) ReportMicropay(ReportMicropayBody) (ReportMicropayResponse, error)
- 下载资金账单:TODO,client.DownloadFundFlow()
- 拉取订单评价数据:TODO,client.BatchQueryComment()
- 授权码查询OpenId:
func (*Client) OpenIdByAuthCode(OpenIdByAuthCodeBody) (OpenIdByAuthCodeResponse, error)
使用样例:
// 测试函数,client的生成参见上文
func Test() {
// 初始化参数
body := wechat.QueryOrderBody{}
body.OutTradeNo = "YgENQFTovdeJdFouNyy3nFVOhGD6ZvPH"
// 请求订单查询
wxRsp, err := client.QueryOrder(body)
if err != nil {
return
}
fmt.Printf("返回值: %+v\n", wxRsp)
}
注意事项:
- 参数或返回值的类型,请查看接口对应的
wx_xxxxxx.go
文件,里面有XXXBody
和XXXResponse
与之对应。 - 参数或返回值中的常量,请参照constant.go文件。
- 具体使用方法,请参照接口对应的
wx_xxxxxx_test.go
测试文件。
文档
- 微信支付文档: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
开发进度
- 境内普通商户
- 境内服务商
测试方法
修改client_test.go
中的生成测试Client的代码,调整沙盒/生产环境、普通商户/服务商等选项,或者修改环境变量,来调整商户参数。
环境变量的脚本在env
文件中,修改后加载环境变量:
source env
go test
TODO
- [ ] 测试改为不同情境使用不同的用例。
- [ ] 继续修改
client.go
中未完成的接口。 - [ ] 继续修改
server_api.go
中的实用工具。 - [ ] 继续调试境内普通商户和境内服务商的其他模块API文档。
- [ ] 选择性调试境外接口。