bank.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package llpay
  2. import (
  3. // "crypto"
  4. // "crypto/md5"
  5. // "crypto/rand"
  6. // "crypto/rsa"
  7. // "crypto/sha1"
  8. // "crypto/sha256"
  9. // "crypto/x509"
  10. // "encoding/base64"
  11. "encoding/json"
  12. "strconv"
  13. // "encoding/pem"
  14. "fmt"
  15. // "sort"
  16. // "strings"
  17. // "time"
  18. "github.com/astaxie/beego"
  19. // "github.com/astaxie/beego/httplib"
  20. "fohow.com/libs/tool"
  21. )
  22. const (
  23. RETURN_CODE_SUCCESS = "0000"
  24. RETURN_CODE_NO_RECORD = "8901"
  25. )
  26. //银行卡信息
  27. type BankCardBin struct {
  28. RetCode string `json:"ret_code"`
  29. RetMsg string `json:"ret_msg"`
  30. SignType string `json:"-"`
  31. Sign string `json:"-"`
  32. BankCode string `json:"bank_code"`
  33. BankName string `json:"bank_name"`
  34. CardType string `json:"card_type"`
  35. }
  36. //用户已签约的银行卡
  37. type UserAgreeBankCards struct {
  38. AgreementList []struct {
  39. NoAgree string `json:"no_agree"` // 银通协议编号 no_agree 否 String 银行卡签约的唯一编号
  40. CardNo string `json:"card_no"` // 银行卡号后4 位 card_no 否 String 银行卡号后4 位
  41. BankCode string `json:"bank_code"` // 所属银行编号 bank_code 否 String
  42. BankName string `json:"bank_name"` // 所属银行名称 bank_name 否 String
  43. CardType int `json:"card_type"` // 银行卡类型 card_type 否 String 2-储蓄卡 3-信用卡
  44. BindMobile string `json:"bind_mobile"` // 绑定手机号码 bind_mobile
  45. } `json:"agreement_list"` //结果集,返回按签约时间倒叙的结果集
  46. RetCode string `json:"ret_code"` // 交易结果代码 ret_code 是 String(4) 0000
  47. RetMsg string `json:"ret_msg"` // 交易结果描述 ret_msg 是 String(100) 交易成功
  48. SignType string `json:"sign_type"` // 签名方式 sign_type 是 String RSA 或者 MD5
  49. Sign string `json:"sign"` //签名 sign 是 String RSA 加密签名,见安全签名机制
  50. UserId int64 `json:"user_id"` // 商户用户唯一编号,该用户在商户系统中的唯一编号,要求是该编号在商户系统中唯一标识该用户
  51. Count int64 `json:"count"` //总记录条数 count 是 Int 本次返回的总记录条数
  52. }
  53. // 获取银行卡信息
  54. // "{\"bank_code\":\"01040000\",\"bank_name\":\"中国银行\",\"card_type\":\"2\",\"ret_code\":\"0000\",\"ret_msg\":\"交易成功\",\"sign\":\"SC6nh3/JN/MdV6icMd5mKIMGb3NoKx4kyevMLYNwyRKcxAmcjqwNf6dzj4YTixfRlqqnnMJJ3ulw5KueC9rw6FLRROcRTgvlxDdsxNYz1VeNKOpo401Nx4PZCynSZSjjqnblRI7FE5hEm5zARRiROcD4lIEBgIpjc4iPJuw6VD8=\",\"sign_type\":\"RSA\"}"
  55. func GetBankCardBin(cardNo string) *BankCardBin {
  56. params := map[string]string{
  57. "oid_partner": beego.AppConfig.String("LianLianPayOidPartner"),
  58. "sign_type": beego.AppConfig.String("LianLianPaySignType"), //MD5 || RSA
  59. "card_no": cardNo,
  60. }
  61. params["sign"] = Signature(params)
  62. url := "https://queryapi.lianlianpay.com/bankcardbin.htm"
  63. resp := tool.PostJSON(url, params)
  64. bankCardBin := new(BankCardBin)
  65. json.Unmarshal([]byte(resp), &bankCardBin)
  66. return bankCardBin
  67. }
  68. //获取绑定的银行卡列表
  69. func GetBankcardBindList(uId int64, offset, cardNo, platform, noAgree string) UserAgreeBankCards {
  70. params := map[string]string{
  71. "oid_partner": beego.AppConfig.String("LianLianPayOidPartner"),
  72. "user_id": strconv.FormatInt(uId, 10),
  73. "offset": offset,
  74. "pay_type": "D",
  75. "sign_type": beego.AppConfig.String("LianLianPaySignType"), //MD5 || RSA
  76. "card_no": cardNo,
  77. }
  78. params["sign"] = Signature(params)
  79. url := "https://queryapi.lianlianpay.com/bankcardbindlist.htm"
  80. resp := tool.PostJSON(url, params)
  81. // beego.BeeLogger.Error("GetBankcardBindList resp=[%s]", resp)
  82. var userAgreeBankCards UserAgreeBankCards
  83. err := json.Unmarshal([]byte(resp), &userAgreeBankCards)
  84. if err != nil {
  85. fmt.Println("error:", err)
  86. }
  87. return userAgreeBankCards
  88. }
  89. //解绑银行卡
  90. type UnbindBankCard struct {
  91. RetCode string `json:"ret_code"` // 交易结果代码 ret_code 是 String(4) 0000
  92. RetMsg string `json:"ret_msg"` // 交易结果描述 ret_msg 是 String(100) 交易成功
  93. SignType string `json:"sign_type"` // 签名方式 sign_type 是 String RSA 或者 MD5
  94. Sign string `json:"sign"` //签名 sign 是 String RSA 加密签名,见安全签名机制
  95. }
  96. func BankCardUnbind(uId int64, noAgree string) *UnbindBankCard {
  97. params := map[string]string{
  98. "oid_partner": beego.AppConfig.String("LianLianPayOidPartner"),
  99. "sign_type": beego.AppConfig.String("LianLianPaySignType"), //MD5 || RSA
  100. // "card_no": cardNo,
  101. "pay_type": "D",
  102. "user_id": strconv.FormatInt(uId, 10),
  103. "no_agree": noAgree,
  104. }
  105. params["sign"] = Signature(params)
  106. url := "https://yintong.com.cn/traderapi/bankcardunbind.htm"
  107. resp := tool.PostJSON(url, params)
  108. unbindBankCard := new(UnbindBankCard)
  109. json.Unmarshal([]byte(resp), &unbindBankCard)
  110. return unbindBankCard
  111. }