doc.adoc 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. = GoWechat使用文档
  2. :toc: left
  3. [[install,安装]]
  4. == 安装
  5. go get github.com/yaotian/gowechat
  6. [[use,使用]]
  7. == 配置
  8. ==== 参数
  9. ```go
  10. var config = wxcontext.Config{
  11. //微信公众平台,商户平台,需要填写的信息
  12. AppID: "your app id",
  13. AppSecret: "your app secret",
  14. Token: "your token",
  15. EncodingAESKey: "your encoding aes key",
  16. //以下是 mch商户平台需要的变量
  17. SslCertFilePath string //证书公钥文件的路径
  18. SslKeyFilePath string //证书私钥文件的路径
  19. SslCertContent string //公钥证书的内容
  20. SslKeyContent string //私钥证书的内容
  21. MchID string //商户ID
  22. MchAPIKey string //商户平台设置的api key
  23. }
  24. ```
  25. === 微信平台的操作接口
  26. ==== 微信公众平台
  27. ```go
  28. wc := gowechat.NewWechat(config)
  29. //微信公众平台
  30. mp, err := wc.MpMgr()
  31. if err != nil {
  32. return
  33. }
  34. ```
  35. ==== 微信商户平台
  36. ```go
  37. wc := gowechat.NewWechat(config)
  38. //微信商户平台
  39. mch , err := wc.MchMgr()
  40. if err != nil {
  41. return
  42. }
  43. ```
  44. == 在框架中使用
  45. === beego中使用的例子
  46. ./examples/beego
  47. === gin中使用的例子
  48. ./examples/gin
  49. === net/http中使用的例子
  50. ./examples/http
  51. [[mp,mp]]
  52. == 微信公众平台
  53. === 初始化
  54. === 消息
  55. === 模板消息
  56. === 用户
  57. === 网页授权
  58. === JSSDK
  59. === 二维码
  60. === 菜单
  61. [[mch,mch]]
  62. == 微信支付(商户平台)
  63. === 1.接口参数
  64. [source,golang]
  65. ----
  66. var config = wxcontext.Config{
  67. //微信公众平台,商户平台,需要填写的信息
  68. AppID: "your app id",
  69. AppSecret: "your app secret",
  70. Token: "your token",
  71. EncodingAESKey: "your encoding aes key",
  72. //------以下是 mch商户平台需要的变量
  73. //
  74. //证书公钥,路径,内容要保证只要有一项设置
  75. SslCertFilePath string //证书公钥文件的路径
  76. SslCertContent string //公钥证书的内容
  77. //私钥,路径,内容要保证只要有一项设置
  78. SslKeyFilePath string //证书私钥文件的路径
  79. SslKeyContent string //私钥证书的内容
  80. MchID string //商户ID
  81. MchAPIKey string //商户平台设置的api key
  82. //------ End 商户平台设置
  83. }
  84. ----
  85. === 2.接口参数创建接口
  86. [source,golang]
  87. ----
  88. wc := gowechat.NewWechat(config)
  89. //微信商户平台
  90. mch , err := wc.MchMgr()
  91. if err != nil {
  92. return
  93. }
  94. ----
  95. === 3.订单参数
  96. [source,golang]
  97. ----
  98. type OrderInput struct {
  99. OpenID string //trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识
  100. Body string //String(128)
  101. OutTradeNum string //String(32) 20150806125346 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
  102. TotalFee int //分为单位
  103. IP string
  104. NotifyURL string //异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数
  105. ProductID string //trade_type=NATIVE时(即扫码支付),此参数必传
  106. tradeType string //JSAPI,NATIVE,APP
  107. }
  108. ----
  109. === 4.订单参数创建支付数据
  110. [source,go]
  111. ----
  112. //接口参数
  113. wc := gowechat.NewWechat(config)
  114. //商户平台接口
  115. mch , err := wc.MchMgr()
  116. if err != nil {
  117. return
  118. }
  119. //订单参数
  120. var order pay.OrderInput
  121. order.OpenID = your_openID
  122. order.Body = "购物支付"
  123. order.OutTradeNum = your_trade_num
  124. order.TotalFee = your_fee
  125. order.IP = your_ip
  126. order.NotifyURL = your_notify_URL
  127. ----
  128. 公众号支付 H5中调用jssdk支付:
  129. [source,go]
  130. ----
  131. //公众号支付(jssdk支付数据)
  132. cfg, err := mch.GetPay().GetJsAPIConfig(order)
  133. ----
  134. 扫码支付:
  135. [source,go]
  136. ----
  137. qrcodeImageURL, err := mch.GetPay().GetNativePayQrcodePicURL(order)
  138. ----
  139. === 5.生成支付JS配置
  140. ==== 1.WeixinJSBridge:
  141. 支付数据,json格式,这些数据可以传递到前端模板中使用
  142. [source,go]
  143. ----
  144. //公众号支付(jssdk支付数据)
  145. cfg, err := mch.GetPay().GetJsAPIConfig(order)
  146. json := cfg.ToJSON()
  147. ----
  148. 前端的JS代码例子
  149. [source,javascript]
  150. ----
  151. ...
  152. WeixinJSBridge.invoke(
  153. 'getBrandWCPayRequest', {{$json}},
  154. function(res){
  155. if(res.err_msg == "get_brand_wcpay_request:ok" ) {
  156. // 使用以上方式判断前端返回,微信团队郑重提示:
  157. // res.err_msg将在用户支付成功后返回
  158. // ok,但并不保证它绝对可靠。
  159. }
  160. }
  161. );
  162. ...
  163. ----
  164. ==== 2.JSSDK:
  165. 支付数据,map格式,这些数据可以传递到前端模板中使用
  166. [source,go]
  167. ----
  168. //公众号支付(jssdk支付数据)
  169. cfg, err := mch.GetPay().GetJsAPIConfig(order)
  170. mapData := cfg.ToMap()
  171. ----
  172. 前端的JS代码例子
  173. [source,javascript]
  174. ----
  175. wx.chooseWXPay({
  176. timestamp: {{$timestamp}},
  177. nonceStr: {{$nonceStr}},
  178. package: {{$package}},
  179. signType: {{$signType}},
  180. paySign: {{$paySign}}, // 支付签名
  181. success: function (res) {
  182. // 支付成功后的回调函数
  183. }
  184. });
  185. ----
  186. === 6.支付通知
  187. 微信支付后,微信服务器会将支付结果回调到你的服务器,服务器地址是在订单参数中设置的NotifyURL,为了安全,过来的数据需要检验正确。
  188. [source,go]
  189. ----
  190. wc := gowechat.NewWechat(config)
  191. //微信商户平台
  192. mch , err := wc.MchMgr()
  193. if err != nil {
  194. return
  195. }
  196. //回调的数据检查,例子
  197. req := c.Ctx.Request
  198. data, err := ioutil.ReadAll(req.Body)
  199. if err != nil {
  200. return
  201. }
  202. isSuccess, err := mch.GetPay().CheckPayNotifyData(data)
  203. if err != nil {
  204. return
  205. }
  206. //成功后,你自己的处理
  207. ----
  208. === 订单
  209. ==== 统一下单
  210. ==== 查询订单
  211. 该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。
  212. 需要调用查询接口的情况:
  213. * 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
  214. * 调用支付接口后,返回系统错误或未知交易状态情况;
  215. * 调用被扫支付API,返回USERPAYING的状态;
  216. * 调用关单或撤销接口API之前,需确认支付状态;
  217. ==== 关闭订单
  218. === 退款
  219. === 账单
  220. [[open,open]]
  221. == 开放平台
  222. [[corp,corp]]
  223. == 企业微信
  224. [[mini,mini]]
  225. == 小程序
  226. [[code,code]]
  227. == 贡献代码