订单

H5支付、公众号支付、扫码支付、支付中签约都是使用这个接口。

下单

JSAPI支付

  1. options := &request.RequestJSAPIPrepay{
  2. Amount: &request.JSAPIAmount{
  3. Total: 1,
  4. Currency: "CNY",
  5. },
  6. Attach: "自定义数据说明",
  7. Description: "Image形象店-深圳腾大-QQ公仔",
  8. OutTradeNo: "5519778939773395659222498001", // 这里是商户订单号,不能重复提交给微信
  9. Payer: &request.JSAPIPayer{
  10. OpenID: "oAuaP0TRUMwP169nQfg7XCEAw3HQ", // 用户的openid, 记得也是动态的。
  11. },
  12. }
  13. // 如果需要覆盖掉全局的notify_url
  14. //options.SetNotifyUrl("https://pay.xxx.com/wx/notify")
  15. // 下单
  16. response, err := services.PaymentApp.Order.JSAPITransaction(ctx,options)
  17. if err != nil {
  18. panic(err)
  19. }
  20. // payConf大致如下:
  21. // {
  22. // "appId": "ww16143ea0101327c7",
  23. // "nonceStr": "jcMfo7lsfM3LPWkLRJb7rQU6WeatStEU",
  24. // "package": "prepay_id=xxxxx",
  25. // "paySign": "hSPF2wU0aYeTq+DJ14ELM...省略部分数据...RrOmlEkZXVxqCdZmniLdA==",
  26. // "signType": "RSA",
  27. // "timeStamp": "1634305101"
  28. // }
  29. payConf, err := services.PaymentApp.JSSDK.BridgeConfig(response.PrepayID, true)

微信官方文档

App支付

  1. options := &request2.RequestAppPrepay{
  2. Amount: &request2.AppAmount{
  3. Total: 1,
  4. Currency: "CNY",
  5. },
  6. Attach: "自定义数据说明",
  7. Description: "Image形象店-深圳腾大-QQ公仔",
  8. OutTradeNo: "5519778939773395659222498001", // 这里是商户订单号,不能重复提交给微信
  9. }
  10. // 如果需要覆盖掉全局的notify_url
  11. //options.SetNotifyUrl(ctx,"https://pay.xxx.com/wx/notify")
  12. // 下单
  13. response, err := services.PaymentApp.Order.TransactionApp(ctx,options)
  14. if err != nil {
  15. panic(err)
  16. }
  17. // 因为PrepayID签名方式都一样,所以这个和App是一样的。
  18. payConf, err := services.PaymentApp.JSSDK.BridgeConfig(ctx,response.PrepayID, true)

微信官方文档

Native支付

  1. options := &request2.RequestNativePrepay{
  2. Amount: &request2.NativeAmount{
  3. Total: 1,
  4. Currency: "CNY",
  5. },
  6. Attach: "自定义数据说明",
  7. Description: "Image形象店-深圳腾大-QQ公仔",
  8. OutTradeNo: "5519778939773395659222598001", // 这里是商户订单号,不能重复提交给微信
  9. }
  10. // reponse成功后返回结果
  11. // {
  12. // "code_url": "weixin://wxpay/bizpayurl?pr=OZdex6kzz"
  13. // }
  14. response, err := services.PaymentApp.Order.TransactionNative(options)

微信官方文档

小程序支付

小程序支付和JSAPI支付接口一样,参考上方**JSAPI支付**

微信官方文档

查询订单

商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。查询订单状态可通过微信支付订单号或商户订单号两种方式查询,两种查询方式返回结果相同。

TIP

以下情况可能需要主动调用查询订单接口。

  1. 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知。
  2. 调用支付接口后,返回系统错误或未知交易状态情况。
  3. 调用被扫支付 API,返回 USERPAYING 的状态。
  4. 调用关单或撤销接口 API 之前,需确认支付状态。
  5. 商户系统自己主动查询订单元数据。

根据商户订单号查询

  1. paymentService.Order.QueryByOutTradeNumber("商户系统的内部订单号 [out_trade_no]")

根据微信支付单号查询

  1. paymentService.Order.QueryByTransactionId("微信支付单号 [transaction_id]")

查询订单返回结果:

  1. {
  2. "amount": {
  3. "currency": "CNY",
  4. "payer_currency": "CNY",
  5. "payer_total": 1,
  6. "total": 1
  7. },
  8. "appid": "ww16143ea010132711",
  9. "attach": "自定义数据说明",
  10. "bank_type": "BOSH_CREDIT",
  11. "mchid": "1611854986",
  12. "out_trade_no": "5519778939773395659222199398",
  13. "payer": {
  14. "openid": "oAuaP0TRUMwP169nQfg7XCEAw3HQ"
  15. },
  16. "promotion_detail": [],
  17. "success_time": "2021-08-28T14:42:39+08:00",
  18. "trade_state": "SUCCESS",
  19. "trade_state_desc": "支付成功",
  20. "trade_type": "JSAPI",
  21. "transaction_id": "4200001207202108286046087211"
  22. }

关闭订单

以下情况需要调用关单接口:

  1. 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
  2. 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
  1. paymentService.Order.Close("商户系统的内部订单号 [out_trade_no]")

WARNING

注意:

关单没有时间限制,建议在订单生成后间隔几分钟(最短5分钟)再调用关单接口,避免出现订单状态同步不及时导致关单失败。