# 微信支付 ** 文章转自go语言中文文档 [http://www.topgoer.com](http://www.topgoer.com/?from=studygolang "文章转自go语言中文文档http://www.topgoer.com") ** 这是用Golang封装了微信的所有API接口的SDK,并自动生成和解析XML数据,包括微信支付、公众号、小程序、移动端的工具函数。 * 支持境内普通商户和境内服务商(境外和银行服务商没有条件测试)。 * 支持全局配置应用ID、商家ID等信息。 * 全部参数和返回值均使用`struct`类型传递,而不是`map`类型。 ### 安装 ```shell go get -u gitee.com/cuckoopark/wechat ``` ### 初始化 ```go 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) ``` ### 使用 以下是通用的接口,使用上面初始化时生成的实例`client`进行相应函数的调用。其中带有`(*Client)`字样的接口,需要使用`wechat.NewClient`创建的实例对象来调用,而不带的接口,则可以直接使用`wechat.XXX`调用。 使用样例: ```go 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`。 ### 文档 * 微信支付文档:[https://pay.weixin.qq.com/wiki/doc/api/index.html](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_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/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/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/micropay.php?chapter=12_1) * 最新县及县以上行政区划代码:[https://pay.weixin.qq.com/wiki/doc/api/download/store_adress.csv](https://pay.weixin.qq.com/wiki/doc/api/download/store_adress.csv) ### 开发进度 * 境内普通商户 * [付款码支付](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1) * [JSAPI支付](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1) * [Native支付](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1) * [APP支付](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1) * [H5支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1) * [小程序支付](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1) * (TODO) [代金券或立减优惠](https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_1) * (TODO) [现金红包](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1) * [企业付款](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1) * 境内服务商 * [付款码支付](https://pay.weixin.qq.com/wiki/doc/api/micropay_sl.php?chapter=5_1) * [JSAPI支付](https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=7_1) * [Native支付](https://pay.weixin.qq.com/wiki/doc/api/native_sl.php?chapter=6_1) * [APP支付](https://pay.weixin.qq.com/wiki/doc/api/app/app_sl.php?chapter=8_1) * [H5支付](https://pay.weixin.qq.com/wiki/doc/api/H5_sl.php?chapter=15_1) * [小程序支付](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=7_3&index=1) * [现金红包](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon_sl.php?chapter=13_1) ### 测试方法 修改`client_test.go`中的生成测试Client的代码,调整沙盒/生产环境、普通商户/服务商等选项,或者修改环境变量,来调整商户参数。 环境变量的脚本在`env`文件中,修改后加载环境变量: ```shell source env go test ``` ### TODO - 测试改为不同情境使用不同的用例。 - 继续调试境内普通商户和境内服务商的其他模块API文档。 - 选择性调试境外接口。 - 继续增加公众号和小程序相关接口。 - 移除`service`开头的文件。 ** 文章转自go语言中文文档 [http://www.topgoer.com](http://www.topgoer.com/?from=studygolang "文章转自go语言中文文档http://www.topgoer.com") **