= GoWechat使用文档 :toc: left [[install,安装]] == 安装 go get github.com/yaotian/gowechat [[use,使用]] == 配置 ==== 参数 ```go var config = wxcontext.Config{ //微信公众平台,商户平台,需要填写的信息 AppID: "your app id", AppSecret: "your app secret", Token: "your token", EncodingAESKey: "your encoding aes key", //以下是 mch商户平台需要的变量 SslCertFilePath string //证书公钥文件的路径 SslKeyFilePath string //证书私钥文件的路径 SslCertContent string //公钥证书的内容 SslKeyContent string //私钥证书的内容 MchID string //商户ID MchAPIKey string //商户平台设置的api key } ``` === 微信平台的操作接口 ==== 微信公众平台 ```go wc := gowechat.NewWechat(config) //微信公众平台 mp, err := wc.MpMgr() if err != nil { return } ``` ==== 微信商户平台 ```go wc := gowechat.NewWechat(config) //微信商户平台 mch , err := wc.MchMgr() if err != nil { return } ``` == 在框架中使用 === beego中使用的例子 ./examples/beego === gin中使用的例子 ./examples/gin === net/http中使用的例子 ./examples/http [[mp,mp]] == 微信公众平台 === 初始化 === 消息 === 模板消息 === 用户 === 网页授权 === JSSDK === 二维码 === 菜单 [[mch,mch]] == 微信支付(商户平台) === 1.接口参数 [source,golang] ---- var config = wxcontext.Config{ //微信公众平台,商户平台,需要填写的信息 AppID: "your app id", AppSecret: "your app secret", Token: "your token", EncodingAESKey: "your encoding aes key", //------以下是 mch商户平台需要的变量 // //证书公钥,路径,内容要保证只要有一项设置 SslCertFilePath string //证书公钥文件的路径 SslCertContent string //公钥证书的内容 //私钥,路径,内容要保证只要有一项设置 SslKeyFilePath string //证书私钥文件的路径 SslKeyContent string //私钥证书的内容 MchID string //商户ID MchAPIKey string //商户平台设置的api key //------ End 商户平台设置 } ---- === 2.接口参数创建接口 [source,golang] ---- wc := gowechat.NewWechat(config) //微信商户平台 mch , err := wc.MchMgr() if err != nil { return } ---- === 3.订单参数 [source,golang] ---- type OrderInput struct { OpenID string //trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识 Body string //String(128) OutTradeNum string //String(32) 20150806125346 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 TotalFee int //分为单位 IP string NotifyURL string //异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数 ProductID string //trade_type=NATIVE时(即扫码支付),此参数必传 tradeType string //JSAPI,NATIVE,APP } ---- === 4.订单参数创建支付数据 [source,go] ---- //接口参数 wc := gowechat.NewWechat(config) //商户平台接口 mch , err := wc.MchMgr() if err != nil { return } //订单参数 var order pay.OrderInput order.OpenID = your_openID order.Body = "购物支付" order.OutTradeNum = your_trade_num order.TotalFee = your_fee order.IP = your_ip order.NotifyURL = your_notify_URL ---- 公众号支付 H5中调用jssdk支付: [source,go] ---- //公众号支付(jssdk支付数据) cfg, err := mch.GetPay().GetJsAPIConfig(order) ---- 扫码支付: [source,go] ---- qrcodeImageURL, err := mch.GetPay().GetNativePayQrcodePicURL(order) ---- === 5.生成支付JS配置 ==== 1.WeixinJSBridge: 支付数据,json格式,这些数据可以传递到前端模板中使用 [source,go] ---- //公众号支付(jssdk支付数据) cfg, err := mch.GetPay().GetJsAPIConfig(order) json := cfg.ToJSON() ---- 前端的JS代码例子 [source,javascript] ---- ... WeixinJSBridge.invoke( 'getBrandWCPayRequest', {{$json}}, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ) { // 使用以上方式判断前端返回,微信团队郑重提示: // res.err_msg将在用户支付成功后返回 // ok,但并不保证它绝对可靠。 } } ); ... ---- ==== 2.JSSDK: 支付数据,map格式,这些数据可以传递到前端模板中使用 [source,go] ---- //公众号支付(jssdk支付数据) cfg, err := mch.GetPay().GetJsAPIConfig(order) mapData := cfg.ToMap() ---- 前端的JS代码例子 [source,javascript] ---- wx.chooseWXPay({ timestamp: {{$timestamp}}, nonceStr: {{$nonceStr}}, package: {{$package}}, signType: {{$signType}}, paySign: {{$paySign}}, // 支付签名 success: function (res) { // 支付成功后的回调函数 } }); ---- === 6.支付通知 微信支付后,微信服务器会将支付结果回调到你的服务器,服务器地址是在订单参数中设置的NotifyURL,为了安全,过来的数据需要检验正确。 [source,go] ---- wc := gowechat.NewWechat(config) //微信商户平台 mch , err := wc.MchMgr() if err != nil { return } //回调的数据检查,例子 req := c.Ctx.Request data, err := ioutil.ReadAll(req.Body) if err != nil { return } isSuccess, err := mch.GetPay().CheckPayNotifyData(data) if err != nil { return } //成功后,你自己的处理 ---- === 订单 ==== 统一下单 ==== 查询订单 该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。 需要调用查询接口的情况: * 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知; * 调用支付接口后,返回系统错误或未知交易状态情况; * 调用被扫支付API,返回USERPAYING的状态; * 调用关单或撤销接口API之前,需确认支付状态; ==== 关闭订单 === 退款 === 账单 [[open,open]] == 开放平台 [[corp,corp]] == 企业微信 [[mini,mini]] == 小程序 [[code,code]] == 贡献代码