蛋蛋星球-制度模式
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

155 рядки
5.6 KiB

  1. package alipay
  2. import (
  3. "fmt"
  4. "log"
  5. "time"
  6. "github.com/go-pay/gopay"
  7. )
  8. // AppId string `json:"app_id"` //支付宝分配给开发者的应用ID
  9. // Method string `json:"method"` //接口名称
  10. // Format string `json:"format"` //仅支持 JSON
  11. // ReturnUrl string `json:"return_url"` //HTTP/HTTPS开头字符串
  12. // Charset string `json:"charset"` //请求使用的编码格式,如utf-8,gbk,gb2312等,推荐使用 utf-8
  13. // SignType string `json:"sign_type"` //商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用 RSA2
  14. // Sign string `json:"sign"` //商户请求参数的签名串
  15. // Timestamp string `json:"timestamp"` //发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"
  16. // Version string `json:"version"` //调用的接口版本,固定为:1.0
  17. // NotifyUrl string `json:"notify_url"` //支付宝服务器主动通知商户服务器里指定的页面http/https路径。
  18. // BizContent string `json:"biz_content"` //业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档
  19. type RoyaltyDetailInfoPojo struct {
  20. RoyaltyType string `json:"royalty_type,omitempty"`
  21. TransOut string `json:"trans_out,omitempty"`
  22. TransOutType string `json:"trans_out_type,omitempty"`
  23. TransInType string `json:"trans_in_type,omitempty"`
  24. TransIn string `json:"trans_in"`
  25. Amount string `json:"amount,omitempty"`
  26. Desc string `json:"desc,omitempty"`
  27. }
  28. // Deprecated
  29. func (a *Client) SetPrivateKeyType(t PKCSType) (client *Client) {
  30. return a
  31. }
  32. // 设置 时区,不设置或出错均为默认服务器时间
  33. func (a *Client) SetLocation(name string) (client *Client) {
  34. location, err := time.LoadLocation(name)
  35. if err != nil {
  36. log.Println("set Location err")
  37. return a
  38. }
  39. a.location = location
  40. return a
  41. }
  42. // Deprecated
  43. // 推荐使用 client.SetCertSnByContent() 或 client.SetCertSnByPath()
  44. // 设置 应用公钥证书SN
  45. // appCertSN:应用公钥证书SN,通过 alipay.GetCertSN() 获取
  46. func (a *Client) SetAppCertSN(appCertSN string) (client *Client) {
  47. a.AppCertSN = appCertSN
  48. return a
  49. }
  50. // Deprecated
  51. // 推荐使用 client.SetCertSnByContent() 或 client.SetCertSnByPath()
  52. // 设置 支付宝公钥证书SN
  53. // aliPayPublicCertSN:支付宝公钥证书SN,通过 alipay.GetCertSN() 获取
  54. func (a *Client) SetAliPayPublicCertSN(aliPayPublicCertSN string) (client *Client) {
  55. a.AliPayPublicCertSN = aliPayPublicCertSN
  56. return a
  57. }
  58. // Deprecated
  59. // 推荐使用 client.SetCertSnByContent() 或 client.SetCertSnByPath()
  60. // 设置 支付宝CA根证书SN
  61. // aliPayRootCertSN:支付宝CA根证书SN,通过 alipay.GetRootCertSN() 获取
  62. func (a *Client) SetAliPayRootCertSN(aliPayRootCertSN string) (client *Client) {
  63. a.AliPayRootCertSN = aliPayRootCertSN
  64. return a
  65. }
  66. // 通过应用公钥证书路径设置 app_cert_sn、alipay_root_cert_sn、alipay_cert_sn
  67. // appCertPath:应用公钥证书路径
  68. // aliPayRootCertPath:支付宝根证书文件路径
  69. // aliPayPublicCertPath:支付宝公钥证书文件路径
  70. func (a *Client) SetCertSnByPath(appCertPath, aliPayRootCertPath, aliPayPublicCertPath string) (err error) {
  71. appCertSn, err := GetCertSN(appCertPath)
  72. if err != nil {
  73. return fmt.Errorf("get app_cert_sn return err, but alse return alipay client. err: %w", err)
  74. }
  75. rootCertSn, err := GetRootCertSN(aliPayRootCertPath)
  76. if err != nil {
  77. return fmt.Errorf("get alipay_root_cert_sn return err, but alse return alipay client. err: %w", err)
  78. }
  79. publicCertSn, err := GetCertSN(aliPayPublicCertPath)
  80. if err != nil {
  81. return fmt.Errorf("get alipay_cert_sn return err, but alse return alipay client. err: %w", err)
  82. }
  83. a.AppCertSN = appCertSn
  84. a.AliPayRootCertSN = rootCertSn
  85. a.AliPayPublicCertSN = publicCertSn
  86. return nil
  87. }
  88. // 通过应用公钥证书内容设置 app_cert_sn、alipay_root_cert_sn、alipay_cert_sn
  89. // appCertContent:应用公钥证书文件内容
  90. // aliPayRootCertContent:支付宝根证书文件内容
  91. // aliPayPublicCertContent:支付宝公钥证书文件内容
  92. func (a *Client) SetCertSnByContent(appCertContent, aliPayRootCertContent, aliPayPublicCertContent []byte) (err error) {
  93. appCertSn, err := GetCertSN(appCertContent)
  94. if err != nil {
  95. return fmt.Errorf("get app_cert_sn return err, but alse return alipay client. err: %w", err)
  96. }
  97. rootCertSn, err := GetRootCertSN(aliPayRootCertContent)
  98. if err != nil {
  99. return fmt.Errorf("get alipay_root_cert_sn return err, but alse return alipay client. err: %w", err)
  100. }
  101. publicCertSn, err := GetCertSN(aliPayPublicCertContent)
  102. if err != nil {
  103. return fmt.Errorf("get alipay_cert_sn return err, but alse return alipay client. err: %w", err)
  104. }
  105. a.AppCertSN = appCertSn
  106. a.AliPayRootCertSN = rootCertSn
  107. a.AliPayPublicCertSN = publicCertSn
  108. return nil
  109. }
  110. // 设置支付后的ReturnUrl
  111. func (a *Client) SetReturnUrl(url string) (client *Client) {
  112. a.ReturnUrl = url
  113. return a
  114. }
  115. // 设置支付宝服务器主动通知商户服务器里指定的页面http/https路径。
  116. func (a *Client) SetNotifyUrl(url string) (client *Client) {
  117. a.NotifyUrl = url
  118. return a
  119. }
  120. // 设置编码格式,如utf-8,gbk,gb2312等,默认推荐使用 utf-8
  121. func (a *Client) SetCharset(charset string) (client *Client) {
  122. if charset != gopay.NULL {
  123. a.Charset = charset
  124. }
  125. return a
  126. }
  127. // 设置签名算法类型,目前支持RSA2和RSA,默认推荐使用 RSA2
  128. func (a *Client) SetSignType(signType string) (client *Client) {
  129. if signType != gopay.NULL {
  130. a.SignType = signType
  131. }
  132. return a
  133. }
  134. // 设置应用授权
  135. func (a *Client) SetAppAuthToken(appAuthToken string) (client *Client) {
  136. a.AppAuthToken = appAuthToken
  137. return a
  138. }