client_example_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Copyright 2021 Tencent Inc. All rights reserved.
  2. package core_test
  3. import (
  4. "context"
  5. "crypto/rsa"
  6. "crypto/x509"
  7. "encoding/json"
  8. "log"
  9. "mime/multipart"
  10. "net/http"
  11. "github.com/wechatpay-apiv3/wechatpay-go/core"
  12. "github.com/wechatpay-apiv3/wechatpay-go/core/auth"
  13. "github.com/wechatpay-apiv3/wechatpay-go/core/cipher"
  14. "github.com/wechatpay-apiv3/wechatpay-go/core/consts"
  15. "github.com/wechatpay-apiv3/wechatpay-go/core/option"
  16. )
  17. func ExampleNewClient_default() {
  18. // 示例参数,实际使用时请自行初始化
  19. var (
  20. mchID string
  21. mchCertificateSerialNumber string
  22. mchPrivateKey *rsa.PrivateKey
  23. wechatPayCertificateList []*x509.Certificate
  24. customHTTPClient *http.Client
  25. )
  26. client, err := core.NewClient(
  27. context.Background(),
  28. // 一次性设置 签名/验签/敏感字段加解密,并注册 平台证书下载器,自动定时获取最新的平台证书
  29. option.WithWechatPayAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, wechatPayCertificateList),
  30. // 设置自定义 HTTPClient 实例,不设置时默认使用 http.Client{},并设置超时时间为 30s
  31. option.WithHTTPClient(customHTTPClient),
  32. )
  33. if err != nil {
  34. log.Printf("new wechat pay client err:%s", err.Error())
  35. return
  36. }
  37. // 接下来使用 client 进行请求发送
  38. _ = client
  39. }
  40. func ExampleNewClient_auto_update_certificate() {
  41. // 示例参数,实际使用时请自行初始化
  42. var (
  43. mchID string
  44. mchCertificateSerialNumber string
  45. mchPrivateKey *rsa.PrivateKey
  46. mchAPIv3Key string
  47. )
  48. client, err := core.NewClient(
  49. context.Background(),
  50. // 一次性设置 签名/验签/敏感字段加解密,并注册 平台证书下载器,自动定时获取最新的平台证书
  51. option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key),
  52. )
  53. if err != nil {
  54. log.Printf("new wechat pay client err:%s", err.Error())
  55. return
  56. }
  57. // 接下来使用 client 进行请求发送
  58. _ = client
  59. }
  60. func ExampleNewClient_fully_customized() {
  61. var (
  62. signer auth.Signer // 自定义实现 auth.Signer 接口的实例
  63. verifier auth.Verifier // 自定义实现 auth.Verifier 接口的实例
  64. encryptor cipher.Encryptor // 自定义实现 auth.Encryptor 接口的实例
  65. decryptor cipher.Decryptor // 自定义实现 cipher.Decryptor 接口的实例
  66. customHTTPClient *http.Client // 自定义 HTTPClient
  67. )
  68. client, err := core.NewClient(
  69. context.Background(),
  70. // 使用自定义 Signer 初始化 微信支付签名器
  71. option.WithSigner(signer),
  72. // 使用自定义 Verifier 初始化 微信支付应答验证器
  73. option.WithVerifier(verifier),
  74. // 使用自定义 Encryptor/Decryptor 初始化 微信支付敏感字段加解密器
  75. option.WithWechatPayCipher(encryptor, decryptor),
  76. // 使用自定义 HTTPClient
  77. option.WithHTTPClient(customHTTPClient),
  78. )
  79. if err != nil {
  80. log.Printf("new wechat pay client err:%s", err.Error())
  81. return
  82. }
  83. // 接下来使用 client 进行请求发送
  84. _ = client
  85. }
  86. func ExampleCreateFormField() {
  87. var w multipart.Writer
  88. meta := map[string]string{
  89. "filename": "sample.jpg",
  90. "sha256": "5944758444f0af3bc843e39b611a6b0c8c38cca44af653cd461b5765b71dc3f8",
  91. }
  92. metaBytes, err := json.Marshal(meta)
  93. if err != nil {
  94. // TODO: 处理错误
  95. return
  96. }
  97. err = core.CreateFormField(&w, "meta", consts.ApplicationJSON, metaBytes)
  98. if err != nil {
  99. // TODO: 处理错误
  100. }
  101. }
  102. func ExampleCreateFormFile() {
  103. var w multipart.Writer
  104. var fileContent []byte
  105. err := core.CreateFormFile(&w, "sample.jpg", consts.ImageJPG, fileContent)
  106. if err != nil {
  107. // TODO: 处理错误
  108. }
  109. }