wechat-sdk
Update
更新至V3版本微信API
如何在项目中引用
V2版本微信API
// get go mod
go get github.com/pyihe/wechat-sdk@v1.0.0
// import in project
import "github.com/pyihe/wechat-sdk"
v2版本API文档
V3版本微信API
// get go mod
go get github.com/pyihe/wechat-sdk/v3@v3.0.0
// import in project
import "github.com/pyihe/wechat-sdk/v3"
Usage
NOTE:
- 考虑v3版本的微信API参数较多且存在很多嵌套的结构体, 对于只需要body参数的API, 本package统统使用interface{}作为函数形参,请调用者自己构造可序列化的参数体(
结构体、map或者序列化好了的json字符串或者字节切片[]byte)!
- 对于非interface{}的形参, 调用者只需要按照函数规定传参即可!
- 对于不同功能但应答参数相似的API(如预支付API和支付查询API等), 本package为了避免重复声明接收API应答参数的结构体, 最终使用了公共的结构体, 调用者处理API返回结果时,
请严格参考 微信官方文档 忽略掉文档没有的参数!
- 对于微信异步回调回来的通知, 本package会将通知结果反序列化至对应的应答结构体, 请调用者根据结果处理自己的业务逻辑, 并在处理完成后一定告知微信服务器!
package main
import (
"github.com/pyihe/wechat-sdk/v3/service"
"github.com/pyihe/wechat-sdk/v3/service/mini"
"github.com/pyihe/wechat-sdk/v3/service/official"
"github.com/pyihe/wechat-sdk/v3/service/payment/merchant"
)
// WechatConfig 微信相关参数配置
var WechatConfig struct {
AppId string `json:"appid"` // 应用ID
MchId string `json:"mchid"` // 商户号
SerialNo string `json:"serial_no"` // 商户证书序列号
Apikey string `json:"apikey"` // API v3 Key
PrivateKeyPath string `json:"private_key"` // 商户平台私钥文件
PublicKeyPath string `json:"public_key"` // 商户微信支付平台公钥文件
}
// PayBody 支付请求参数
type PayBody struct {
AppId string `json:"appid"` // 应用ID
MchId string `json:"mchid"` // 商户号
Description string `json:"description"` // 商品描述
OutTradeNo string `json:"out_trade_no"` // 商户订单号
NotifyUrl string `json:"notify_url"` // 支付异步回调通知
Amount *Amount `json:"amount"` // 订单金额信息
Payer *Payer `json:"payer"` // 支付者
}
type Amount struct {
Total int64 `json:"total"` // 订单总金额
Currency string `json:"currency,omitempty"` // 货币类型
}
type Payer struct {
OpenId string `json:"openid"` // 用户标识
}
func handleErr(err error) {
//...
}
func main() {
var opts = []service.Option{
service.WithAppId(WechatConfig.AppId),
service.WithMchId(WechatConfig.MchId),
service.WithApiV3Key(WechatConfig.Apikey),
service.WithSerialNo(WechatConfig.SerialNo),
}
var srvConfig = service.NewConfig(opts...)
var param = &PayBody{
AppId: "wxdace645e0bc2cXXX",
MchId: "1900006XXX",
Description: "Image形象店-深圳腾大-QQ公仔",
OutTradeNo: "1217752501201407033233368318",
NotifyUrl: "https://weixin.qq.com/",
Amount: &Amount{
Total: 1,
Currency: "CNY",
},
Payer: &Payer{OpenId: "o4GgauInH_RCEdvrrNGrntXDuXXX"},
}
// 普通商户支付
merchantResponse, err := merchant.JSAPI(srvConfig, param)
if err != nil {
handleErr(err)
}
// 小程序获取用户openid
miniData, err := mini.GetOpenId(srvConfig, "your jsCode")
if err != nil {
handleErr(err)
}
// 公众号获取用户openid
officialData, err := official.GetOpenId(srvConfig, "your grant code")
if err != nil {
handleErr(err)
}
}
TODO
致谢
感谢Jetbrains开源开发许可证 提供的免费开发工具支持!