charging.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // 收款、代收
  2. package unionpay
  3. // EntrustCharge 代扣费用
  4. func EntrustCharge(mi *MerchantInfo, oi OrderInfo, ci CustomerInfo) (res ReqRespose, err error) {
  5. notifyURL := "https://park.chuangxin1.com/api/payment/notify/zhuhai"
  6. /*
  7. var (
  8. accNo []byte
  9. encrypted []byte
  10. signature []byte
  11. values = &url.Values{}
  12. args = make(map[string]string)
  13. )
  14. args["version"] = "5.1.0" // 版本号
  15. args["encoding"] = "utf-8" // 编码方式
  16. args["signMethod"] = "01" // 签名方法
  17. args["txnType"] = "11" // 交易类型
  18. args["txnSubType"] = "02" // 交易子类
  19. args["bizType"] = "000501" // 业务类型
  20. args["accessType"] = "0" // 接入类型
  21. args["channelType"] = "07" // 渠道类型
  22. args["currencyCode"] = "156" // 交易币种, 境内商户勿改
  23. args["backUrl"] = notifyURL // 后台通知地址
  24. args["encryptCertId"] = mi.SerialNumber() // 验签证书序列号
  25. args["certId"] = mi.SerialNumber() // 证书序列号
  26. args["merId"] = mi.MerID // 商户代码
  27. args["orderId"] = oi.OrderID // 商户订单号,8-32位数字字母,不能含“-”或“_”
  28. args["txnTime"] = oi.TxnTime // 订单发送时间,格式为YYYYMMDDhhmmss,取北京时间
  29. args["txnAmt"] = "12" // 交易金额
  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.TxnType = "11" // 交易类型, 取值:11
  56. args.TxnSubType = "02" // 交易子类, 取值:02
  57. args.BizType = "000501" // 业务类型 代收产品
  58. args.BackURL = notifyURL
  59. body, err = args.ToBody(mi, ci)
  60. if err != nil {
  61. return
  62. }
  63. res, err = post(BaseHost+ReqBackTrans, []byte(body))
  64. if err != nil {
  65. return
  66. }
  67. _, err = res.Ok()
  68. return
  69. }