entrust.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // 委托
  2. package unionpay
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7. // EntrustEstablish 建立委托
  8. func EntrustEstablish(mi *MerchantInfo, oi OrderInfo, ci CustomerInfo) (res ReqRespose, err error) {
  9. /*
  10. var (
  11. accNo []byte
  12. encrypted []byte
  13. signature []byte
  14. values = &url.Values{}
  15. args = make(map[string]string)
  16. )
  17. args["version"] = "5.1.0" // 版本号
  18. args["encoding"] = "utf-8" // 编码方式
  19. args["signMethod"] = "01" // 签名方法
  20. args["txnType"] = "72" // 交易类型
  21. args["txnSubType"] = "11" // 交易子类
  22. args["bizType"] = "000501" // 业务类型
  23. args["accessType"] = "0" // 接入类型
  24. args["channelType"] = "07" // 渠道类型
  25. args["encryptCertId"] = mi.SerialNumber() // 验签证书序列号
  26. args["certId"] = mi.SerialNumber() // 证书序列号
  27. args["merId"] = mi.MerID // 商户代码
  28. args["orderId"] = oi.OrderID // 商户订单号,8-32位数字字母,不能含“-”或“_”
  29. args["txnTime"] = oi.TxnTime // 订单发送时间,格式为YYYYMMDDhhmmss,取北京时间
  30. accNo, err = mi.Encrypt([]byte(ci.CardNo))
  31. if err != nil {
  32. return
  33. }
  34. args["accNo"] = base64Encode(accNo)
  35. encrypted, err = mi.EncryptCustomerInfo(ci)
  36. if err != nil {
  37. return
  38. }
  39. args["customerInfo"] = ci.String(encrypted)
  40. signature, err = mi.Sign([]byte(createLinkString(args, true, false)))
  41. if err != nil {
  42. return
  43. }
  44. args["signature"] = base64Encode(signature) // 签名
  45. for k, v := range args {
  46. values.Add(k, v)
  47. }
  48. res, err = post(BaseHost+ReqBackTrans, []byte(values.Encode()))
  49. if err != nil {
  50. return
  51. }
  52. // */
  53. var body string
  54. args := newParams(oi, ci)
  55. args.BizType = "000501" // 业务类型 代收产品
  56. args.TxnType = "72" // 交易类型 取值:72
  57. args.TxnSubType = "11" // 交易子类, 11 建立委托关系
  58. body, err = args.ToBody(mi, ci)
  59. if err != nil {
  60. return
  61. }
  62. res, err = post(BaseHost+ReqBackTrans, []byte(body))
  63. if err != nil {
  64. return
  65. }
  66. _, err = res.Ok()
  67. bs, _ := json.Marshal(res)
  68. fmt.Println(string(bs))
  69. return
  70. }