微信支付的GoLang接口封装方案

作者: 爱翻身的咸鱼 | 来源:发表于2019-08-19 18:37 被阅读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文件,里面有XXXBodyXXXResponse与之对应。
    • 参数或返回值中的常量,请参照constant.go文件。
    • 具体使用方法,请参照接口对应的wx_xxxxxx_test.go测试文件。

    文档

    开发进度

    测试方法

    修改client_test.go中的生成测试Client的代码,调整沙盒/生产环境、普通商户/服务商等选项,或者修改环境变量,来调整商户参数。

    环境变量的脚本在env文件中,修改后加载环境变量:

    source env
    go test
    

    TODO

    • [ ] 测试改为不同情境使用不同的用例。
    • [ ] 继续修改client.go中未完成的接口。
    • [ ] 继续修改server_api.go中的实用工具。
    • [ ] 继续调试境内普通商户和境内服务商的其他模块API文档。
    • [ ] 选择性调试境外接口。

    相关文章

      网友评论

        本文标题:微信支付的GoLang接口封装方案

        本文链接:https://www.haomeiwen.com/subject/xqbesctx.html