global.go 4.2 KB

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