瀏覽代碼

unionpay v3 remove bind

ls 5 年之前
父節點
當前提交
b85f4d621c
共有 1 個文件被更改,包括 95 次插入3 次删除
  1. 95 3
      unionpay/v3.go

+ 95 - 3
unionpay/v3.go

@@ -24,11 +24,56 @@ func getCustomerV3(ci CustomerInfo) (s string) {
 
 // V3SendSms 发送验证码(Version 3.0)
 func V3SendSms(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
+	args := make(map[string]string)
+
+	args["version"] = "3.0.0"
+	args["encoding"] = "utf-8"
+	args["txnType"] = "77"
+	args["txnSubType"] = "00"
+	args["bizType"] = "000000"
+	args["accessType"] = "0"
+	args["merType"] = "0"
+	args["merId"] = mi.MerID
+	args["merName"] = ""         // 商户名称
+	args["merAbbr"] = "珠海城建公共资源" // 商户简称
+	args["smsType"] = ""         // 短信类型
+	args["subMerId"] = ""        // 二级商户代码
+	args["subMerName"] = ""      // 二级商户名称
+	args["subMerAbbr"] = ""      // 二级商户简称
+	args["accType"] = "01"
+	args["accNo"] = ci.CardNo // 账号, 不加密
+	args["orderId"] = oi.OrderID
+	args["txnTime"] = oi.TxnTime
+	args["txnAmt"] = strconv.Itoa(oi.TxnAmt)
+	args["currencyCode"] = "156"
+	args["customerInfo"] = ci.Phone //base64Encode([]byte(getCustomerV3(ci)))
+	args["bindId"] = ""
+	args["reqReserved"] = ""
+	args["reserved"] = ""
+	//args["encryptCertId"] = mi.SerialNumber()
+	args["certId"] = mi.SerialNumber()
+
+	s := createLinkString(args, true, false)
+	sha1 := util.SHA1(s)
+
+	var data []byte
+	data, err = signsha1(mi.PrivateKey, []byte(sha1))
+	if err != nil {
+		return
+	}
+
+	args["signature"] = base64Encode(data)
+	values := url.Values{}
+	for k, v := range args {
+		values.Add(k, v)
+	}
+	res, err = post(V3BaseHost+V3ReqBackTrans, []byte(values.Encode()))
+
 	return
 }
 
-// V3Verify 验证卡片(Version 3.0)
-func V3Verify(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
+// V3Bind 验证绑定卡片(Version 3.0)
+func V3Bind(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
 	args := make(map[string]string)
 
 	args["version"] = "3.0.0"
@@ -46,7 +91,7 @@ func V3Verify(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose,
 	args["accType"] = "01"
 	args["accNo"] = ci.CardNo // 账号, 不加密
 	args["customerInfo"] = base64Encode([]byte(getCustomerV3(ci)))
-	args["bindId"] = ""
+	args["bindId"] = ci.CardNo
 	args["riskLevel"] = ""
 	args["bindInfo"] = ""
 	args["reqReserved"] = ""
@@ -74,6 +119,53 @@ func V3Verify(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose,
 	return
 }
 
+// V3Remove 解除绑定卡片(Version 3.0)
+func V3Remove(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
+	args := make(map[string]string)
+
+	args["version"] = "3.0.0"
+	args["encoding"] = "utf-8"
+	args["txnType"] = "74"
+	args["txnSubType"] = "00"
+	args["bizType"] = "000000"
+	args["accessType"] = "0"
+	args["merType"] = "0"
+	args["merId"] = mi.MerID
+	args["subMerId"] = ""
+	args["subMerName"] = ""
+	args["orderId"] = oi.OrderID
+	args["txnTime"] = oi.TxnTime
+	//args["accType"] = "01"
+	args["accNo"] = ci.CardNo // 账号, 不加密
+	//args["customerInfo"] = base64Encode([]byte(getCustomerV3(ci)))
+	args["bindId"] = ci.CardNo
+	args["riskLevel"] = ""
+	//args["bindInfo"] = ""
+	args["reqReserved"] = ""
+	args["reserved"] = ""
+	//args["encryptCertId"] = mi.SerialNumber()
+	//args["userMac"] = ""
+	args["certId"] = mi.SerialNumber()
+
+	s := createLinkString(args, true, false)
+	sha1 := util.SHA1(s)
+
+	var data []byte
+	data, err = signsha1(mi.PrivateKey, []byte(sha1))
+	if err != nil {
+		return
+	}
+
+	args["signature"] = base64Encode(data)
+	values := url.Values{}
+	for k, v := range args {
+		values.Add(k, v)
+	}
+	res, err = post(V3BaseHost+V3ReqBackTrans, []byte(values.Encode()))
+
+	return
+}
+
 // V3Charging 代扣(Version 3.0)
 func V3Charging(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
 	args := make(map[string]string)