作为一个后端开发人员来说,微信开发已经是必备的技能之一了,今天小编就来分享一个相关的类库shenghui0779/gochat(以下简称wechat)。这个类库简单易用,看源码的时候目录结构一目了然,可以看出作者的思路很清晰,功能也挺丰富日常开发来绝对够用。下面跟着小编的节凑来一探究竟吧。
目录结构
- mch: 商户平台相关业务, 下单、支付、退款、查询、委托代扣、企业付款、企业红包 等
- mp:小程序端相关业务, 小程序授权、用户数据解析、消息发送、二维码生成、消息 等
- pub:公众号相关业务, 网页授权、菜单、模板消息、消息回复、用户管理、消息转客服 等
- wechat.go 包的入口,获取以上三个业务的实例
一、支付
下单用法
import (
"github.com/iiinsomnia/gochat"
"github.com/iiinsomnia/gochat/mch"
)
// UnifiedOrder 统一下单数据 直接引用包里的结构体即可
type UnifiedOrder struct {
// 必填参数
OutTradeNO string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
TotalFee int // 订单总金额,单位为分,详见支付金额
SpbillCreateIP string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
TradeType string // 取值如下:JSAPI,NATIVE,APP,MWEB,详细说明见参数规定
Body string // 商品或支付单简要描述
NotifyURL string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
// 选填参数
DeviceInfo string // 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
Detail string // 商品名称明细列表
Attach string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
FeeType string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
TimeStart string // 订单生成时间,格式为yyyyMMddHHmmss,如:2009年12月25日9点10分10秒 表示为:20091225091010
TimeExpire string // 订单失效时间,格式为yyyyMMddHHmmss,如:2009年12月27日9点10分10秒 表示为:20091227091010
GoodsTag string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
ProductID string // trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义
LimitPay string // no_credit--指定不能使用信用卡支付
OpenID string // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识
Receipt bool // 是否在支付成功消息和支付详情页中出现开票入口,注:需要在微信支付商户平台或微信公众平台开通电子发票功能
SceneInfo string // 该字段用于上报支付的场景信息
}
// 初始化实例
wxmch := gochat.NewWXMch(appid, apikey, cert)
r, err := wxmch.Order().Unify(order)
if err != nil {
// 错误处理...
}
if r["result_code"] != mch.ResultSuccess {
// 判断微信的返回状态码,失败处理...
}
// 成功逻辑处理...
// 拿到预支付的id
prepayID := r["prepay_id"]
// 获取支付签名的票据,返回给前端和app就能拉取支付界面了
// APP
data := wxmch.APPAPI(prepayID)
// JS
data := wxmch.JSAPI(prepayID)
查询订单状态
// RefundData 退款数据
type RefundData struct {
// 必填参数
OutRefundNO string // 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
TotalFee int // 订单总金额,单位为分,只能为整数,详见支付金额
RefundFee int // 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
// 选填参数
RefundFeeType string // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
RefundDesc string // 若商户传入,会在下发给用户的退款消息中体现退款原因
RefundAccount string // 退款资金来源,仅针对老资金流商户使用
NotifyURL string // 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数
}
// 根据微信订单号查询
r, err := wxmch.Order().QueryByTransactionID(transactionID)
// 根据商户订单号查询
r, err := wxmch.Order().QueryByOutTradeNO(transactionID)
// 关闭订单
r, err := wxmch.Order().Close(outTradeNO)
退款
// 根据微信订单号退款
r, err := wxmch.Refund().RefundByTransactionID(transactionID, refundData)
if err != nil {
// 错误处理...
}
if r["result_code"] != mch.ResultSuccess {
// 失败处理...
}
// 成功逻辑处理...
// 根据商户订单号退款
r, err := wxmch.Refund().RefundByOutTradeNO(outTradeNO, refundData)
if err != nil {
// 错误处理...
}
if r["result_code"] != mch.ResultSuccess {
// 失败处理...
}
// 成功逻辑处理...
小程序
登录授权
import (
"github.com/iiinsomnia/gochat"
"github.com/iiinsomnia/gochat/mp"
"github.com/iiinsomnia/gochat/utils"
)
// 初始化小程序实例
wxmp := gochat.NewWXMP(appid, appsecret)
// 授权
session, err := wxmp.Sns().Code2Session(code)
// 数据校验解密
// 数据签名校验
if signature != utils.SHA1(rawData+sessionKey) {
return errors.New("签名校验失败")
}
// 数据解密
bizDataCrypt := wxmp.BizDataCrypt(encryptedData, sessionKey, iv)
if err := bizDataCrypt.Decrypt(); err != nil {
return err
}
// 解密后取用户信息
bizData, err := bizDataCrypt.GetUserData()
if err != nil {
return err
}
获取access_token
accessToken, err := wxmp.CgiBin().GetAccessToken()
if err != nil {
return err
}
// TODO: 存储 access_token ...
公众号
// 获取公众号实例
pub := gochat.NewWXPub(accountid, appid, appsecret, signToken, encodingAESKey)
整个包看下来还是蛮简单,使用方便。想要了解更多内容可以去查看作者的源码和使用说明。
地址: