global.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package alipay
  2. import (
  3. "fmt"
  4. "github.com/smartwalle/alipay"
  5. "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
  6. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  7. "io/ioutil"
  8. "strings"
  9. )
  10. var alipayClient *alipay.Client = nil
  11. var AliPayConfig struct {
  12. AppId string // app id
  13. SignMode string // 签名模式,common:普通公钥;cert:公钥证书
  14. AppPrivateKeyFile string // 保存支付宝开发平台助手生成应用密钥(第一个页面)内容的文件
  15. AppPrivateKey string // 应用密钥
  16. // 签名模式为普通公钥所需的文件
  17. AliPayPublicKeyFile string // 支付宝支付公钥文件
  18. AliPayPublicKey string // 支付宝支付公钥
  19. // 签名模式为共钥证书所需的文件
  20. AppPublicCertFile string // 应用公钥证书,获取csr并上传csr后获得的
  21. AliPayRootCertFile string // 支付宝根证书,获取csr并上传csr后获得的
  22. AliPayPublicCertFile string // 支付宝公钥证书,获取csr并上传csr后获得的
  23. AliPayCallback string // 支付宝完整回调信息接口url,既notifyurl
  24. }
  25. func init(){
  26. AliPayConfig.AppId = config.AppConfig.GetKey("alipay_appid")
  27. AliPayConfig.SignMode = config.AppConfig.GetKey("alipay_sign_mode") // 签名模式,common:普通公钥;cert:公钥证书
  28. if AliPayConfig.SignMode == ""{
  29. // 默认为普通公钥
  30. AliPayConfig.SignMode = "common"
  31. }
  32. AliPayConfig.AppPrivateKeyFile = config.AppConfig.GetKey("alipay_app_private_key_file") // 保存支付宝开发平台助手生成应用密钥(第一个页面)内容的文件
  33. // 签名模式为普通公钥所需的文件
  34. AliPayConfig.AliPayPublicKeyFile = config.AppConfig.GetKey("alipay_public_key_file")
  35. // 签名模式为共钥证书所需的文件
  36. AliPayConfig.AppPublicCertFile = config.AppConfig.GetKey("alipay_app_public_cert_file") // 应用公钥证书,获取csr并上传csr后获得的
  37. AliPayConfig.AliPayRootCertFile = config.AppConfig.GetKey("alipay_root_cert_file") // 支付宝根证书,获取csr并上传csr后获得的
  38. AliPayConfig.AliPayPublicCertFile = config.AppConfig.GetKey("alipay_public_cert_file")// 支付宝公钥证书,获取csr并上传csr后获得的
  39. // 回调
  40. AliPayConfig.AliPayCallback = config.AppConfig.GetKey("alipay_callback") // 支付宝完整回调信息接口url,既notifyurl
  41. bytess , err := ioutil.ReadFile(AliPayConfig.AppPrivateKeyFile)
  42. if err != nil{
  43. fmt.Println("init alipay error, app private key file", AliPayConfig.AppPrivateKeyFile, "does not exist", err.Error())
  44. return
  45. }
  46. AliPayConfig.AppPrivateKey = strings.TrimSpace(string(bytess))
  47. alipayClient, err = alipay.New(AliPayConfig.AppId, AliPayConfig.AppPrivateKey, true)
  48. if err != nil{
  49. fmt.Println("new alipay client error", err.Error())
  50. return
  51. }
  52. if AliPayConfig.SignMode == "common"{
  53. bytess, err = ioutil.ReadFile(AliPayConfig.AliPayPublicKeyFile)
  54. if err != nil{
  55. fmt.Println("read alipay public key error", err.Error(), AliPayConfig.AliPayPublicKeyFile)
  56. return
  57. }
  58. AliPayConfig.AliPayPublicKey = strings.TrimSpace(string(bytess))
  59. err = alipayClient.LoadAliPayPublicKey(AliPayConfig.AliPayPublicKey)
  60. if err != nil{
  61. fmt.Println("LoadAliPayPublicKey error", err.Error(), AliPayConfig.AliPayPublicKeyFile)
  62. return
  63. }
  64. }else{
  65. err = alipayClient.LoadAppPublicCertFromFile(AliPayConfig.AppPublicCertFile)
  66. if err != nil{
  67. fmt.Println("LoadAppPublicCertFromFile error", err.Error(), AliPayConfig.AppPublicCertFile)
  68. return
  69. }
  70. err = alipayClient.LoadAliPayRootCertFromFile(AliPayConfig.AliPayRootCertFile)
  71. if err != nil{
  72. fmt.Println("LoadAliPayRootCertFromFile error", err.Error(), AliPayConfig.AliPayRootCertFile)
  73. return
  74. }
  75. err = alipayClient.LoadAliPayPublicCertFromFile(AliPayConfig.AliPayPublicCertFile)
  76. if err != nil{
  77. fmt.Println("LoadAliPayPublicCertFromFile error", err.Error(), AliPayConfig.AliPayPublicCertFile)
  78. return
  79. }
  80. }
  81. }
  82. /***********************************************************/
  83. // 支付参数
  84. type PayParams struct{
  85. // 请求上下文
  86. Ctx *entitys.CtrlContext
  87. // 订单标题
  88. Subject string
  89. // 交易单号(最长64位)
  90. OutTradeNo string
  91. // 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
  92. TotalAmount string
  93. // 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY
  94. ProductCode string
  95. }