wx_pay.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/wechatpay-apiv3/wechatpay-go/core"
  6. "github.com/wechatpay-apiv3/wechatpay-go/core/option"
  7. "github.com/wechatpay-apiv3/wechatpay-go/services/payments/jsapi"
  8. payUtils "github.com/wechatpay-apiv3/wechatpay-go/utils"
  9. "hongze/hongze_mfyx/models/order"
  10. "hongze/hongze_mfyx/utils"
  11. "log"
  12. )
  13. const (
  14. MchPKFileName = "./utils/cret/apiclient_key.pem"
  15. Mchid = "1624495680"
  16. MchCertificateSerialNumber = "5ED2719CFAE5205763034AD80BF4B8A33533C418"
  17. MchAPIv3Key = "W1tbnzQrzQ7yRRNuQCIHjis8dgdasKVX"
  18. )
  19. //func init() {
  20. // ExampleJsapiApiServicePrepay()
  21. //}
  22. // 获取加解密处理
  23. func getWechatClient() (context.Context, *core.Client, error) {
  24. // 使用 utils 提供的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
  25. mchPrivateKey, err := payUtils.LoadPrivateKeyWithPath(MchPKFileName)
  26. if err != nil {
  27. log.Print("load merchant private key error")
  28. return nil, nil, err
  29. }
  30. ctx := context.Background()
  31. // 使用商户私钥等初始化 client,并使它具有自动定时获取微信支付平台证书的能力
  32. opts := []core.ClientOption{
  33. option.WithWechatPayAutoAuthCipher(Mchid, MchCertificateSerialNumber, mchPrivateKey, MchAPIv3Key),
  34. }
  35. client, err := core.NewClient(ctx, opts...)
  36. if err != nil {
  37. log.Printf("new wechat pay client err:%s", err)
  38. return nil, nil, err
  39. }
  40. return ctx, client, nil
  41. }
  42. func ExampleJsapiApiServicePrepay(orderDetail *order.CygxOrder, openid string) {
  43. //mchPrivateKey, err := payUtils.LoadPrivateKeyWithPath(MchPKFileName)
  44. //if err != nil {
  45. // log.Print("load merchant private key error")
  46. // return
  47. //}
  48. //ctx := context.Background()
  49. //// 使用商户私钥等初始化 client,并使它具有自动定时获取微信支付平台证书的能力
  50. //opts := []core.ClientOption{
  51. // option.WithWechatPayAutoAuthCipher(Mchid, MchCertificateSerialNumber, mchPrivateKey, MchAPIv3Key),
  52. //}
  53. //client, err := core.NewClient(ctx, opts...)
  54. ctx, client, err := getWechatClient()
  55. if err != nil {
  56. log.Printf("getWechatClientt err:%s", err)
  57. return
  58. }
  59. svc := jsapi.JsapiApiService{Client: client}
  60. // 得到prepay_id,以及调起支付所需的参数和签名
  61. resp, _, err := svc.PrepayWithRequestPayment(ctx,
  62. jsapi.PrepayRequest{
  63. Appid: core.String(utils.WxAppId),
  64. Mchid: core.String(Mchid),
  65. Description: core.String(orderDetail.SourceTitle),
  66. OutTradeNo: core.String(orderDetail.OrderCode),
  67. Attach: core.String(""),
  68. NotifyUrl: core.String("https://www.weixin.qq.com/wxpay/pay.php"),
  69. Amount: &jsapi.Amount{
  70. Total: core.Int64(int64(orderDetail.OrderMoney * 100)), // 分
  71. },
  72. Payer: &jsapi.Payer{
  73. Openid: core.String(openid),
  74. },
  75. },
  76. )
  77. fmt.Println("PrepayId", *resp)
  78. if err == nil {
  79. log.Println(*resp.Appid)
  80. } else {
  81. log.Println(err)
  82. }
  83. }