167 lines
5.4 KiB
Go
167 lines
5.4 KiB
Go
package test
|
||
|
||
import (
|
||
"context"
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
"net/url"
|
||
"testing"
|
||
"time"
|
||
v1 "voucher/api/v1"
|
||
"voucher/internal/biz/vo"
|
||
"voucher/internal/pkg/cmb"
|
||
"voucher/internal/pkg/helper"
|
||
"voucher/internal/pkg/request"
|
||
)
|
||
|
||
func Test_CMBRequest(t *testing.T) {
|
||
|
||
bizParma := &v1.CmbNotifyRequest{
|
||
Ticket: "190662195271022592015", // 优惠券券码,codeNo
|
||
Status: "0", // 更新后串码状态,0:可使用,1:已使用
|
||
TransDate: "", // 验码日期,格式yyyy-mm-dd hh:mm:ss.sss
|
||
OrgNo: "LANSEXIONGDI", // 固定值
|
||
Ext: "", // 扩展字段
|
||
Attach: "bFUWzuzvJfBshobjcQPFTvpqcH1AvGqHJtiV44mdsWEQKCPXgydk8ft/b227S3TM", // 扩展字段
|
||
TransactionId: "2000000000001422730", // 招行唯一流水号
|
||
}
|
||
|
||
bizParmaJsonBytes, err := json.Marshal(bizParma)
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
encryptBody, err := cmb.EncryptBody(&cmb.Encrypts{SoaPubKey: "0416445bc16cbf42e47002ad9fe7c7af67d902b48be1eb69b98f6a006b0918630e1127f5f2fff83b2ecb30fc7fd72c34c33f37c7c355dffde3589f66800f0036ca", JsonParam: string(bizParmaJsonBytes)})
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
req := &v1.CmbRequest{
|
||
Mid: "d6fdd78b6fd13a808818286b9cad9687",
|
||
Aid: "5efaa21263b94f669a1c90ed0279df20",
|
||
Date: time.Now().Format("20060102150405"),
|
||
Random: string(cmb.RandomBytes(16)),
|
||
KeyAlias: "CO_PUB_KEY_SM2",
|
||
CmbKeyAlias: "SM2_CMBLIFE",
|
||
EncryptBody: encryptBody,
|
||
Sign: "",
|
||
}
|
||
|
||
str := fmt.Sprintf("%s?%s", vo.CmbNotifyFuncName, cmb.SortStructStr(req))
|
||
|
||
sign, err := cmb.SignBody(str, "8d39ff3d2559258c163f4510f082727f51531e1953ab203d5ab1ea4a6d94fd73")
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
req.Sign = sign
|
||
|
||
kvRows := helper.SortStructFieldsByKey(req)
|
||
|
||
uv := url.Values{}
|
||
|
||
for _, kv := range kvRows {
|
||
uv.Set(kv.Key, fmt.Sprintf("%v", kv.Value))
|
||
}
|
||
|
||
h := http.Header{
|
||
"Content-Type": []string{"application/x-www-form-urlencoded"},
|
||
}
|
||
|
||
uri := "https://sandbox.cdcc.cmbchina.com/AccessGateway/transIn/updateCodeStatus.json"
|
||
r := uri + "?" + uv.Encode()
|
||
|
||
respHeader, bodyBytes, err := request.Post(context.Background(), r, nil, request.WithHeaders(h), request.WithTimeout(time.Second*10))
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
t.Logf("请求地址:%s", uri)
|
||
t.Logf("业务参数:%s", string(bizParmaJsonBytes))
|
||
t.Logf("请求响应体:%s", string(bodyBytes))
|
||
t.Logf("请求响应头:%+v", respHeader)
|
||
}
|
||
|
||
func Test_CmMultiRequest(t *testing.T) {
|
||
|
||
bizParma := &v1.CmbMultiNotifyRequest{
|
||
TransactionId: "2000000000001636670", // 招行唯一流水号
|
||
ActivityId: "11941580000000008",
|
||
CouponId: "118770338167",
|
||
AcquiredDate: "2025-08-25 14:56:54.123",
|
||
Status: "1", // 更新后串码状态,0:可使用,1:已使用
|
||
CouponStatus: "1", // String|M 整张券总状态0:可使用,1:已使用
|
||
TransDate: "2025-08-28 12:09:41.123", // 验码日期,格式yyyy-mm-dd hh:mm:ss.sss
|
||
TransAmount: "10",
|
||
OrderId: "4200002772202508280813272296",
|
||
Ticket: "195987259358664294429", // 优惠券券码,codeNo
|
||
OrgNo: "LANSEXIONGDI", // 固定值
|
||
Attach: "bFUWzuzvJfBshobjcQPFTvpqcH1AvGqHJtiV44mdsWEQKCPXgydk8ft/b227S3TM", // 扩展字段
|
||
Ext: "", // 扩展字段
|
||
}
|
||
|
||
bizParmaJsonBytes, err := json.Marshal(bizParma)
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
encryptBody, err := cmb.EncryptBody(&cmb.Encrypts{SoaPubKey: "0416445bc16cbf42e47002ad9fe7c7af67d902b48be1eb69b98f6a006b0918630e1127f5f2fff83b2ecb30fc7fd72c34c33f37c7c355dffde3589f66800f0036ca", JsonParam: string(bizParmaJsonBytes)})
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
req := &v1.CmbRequest{
|
||
Mid: "d6fdd78b6fd13a808818286b9cad9687",
|
||
Aid: "5efaa21263b94f669a1c90ed0279df20",
|
||
Date: time.Now().Format("20060102150405"),
|
||
Random: string(cmb.RandomBytes(16)),
|
||
KeyAlias: "CO_PUB_KEY_SM2",
|
||
CmbKeyAlias: "SM2_CMBLIFE",
|
||
EncryptBody: encryptBody,
|
||
Sign: "",
|
||
}
|
||
|
||
str := fmt.Sprintf("%s?%s", vo.CmbNotifyFuncNameUpdateCodeStatusForMulti, cmb.SortStructStr(req))
|
||
|
||
sign, err := cmb.SignBody(str, "8d39ff3d2559258c163f4510f082727f51531e1953ab203d5ab1ea4a6d94fd73")
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
req.Sign = sign
|
||
|
||
kvRows := helper.SortStructFieldsByKey(req)
|
||
|
||
uv := url.Values{}
|
||
|
||
for _, kv := range kvRows {
|
||
uv.Set(kv.Key, fmt.Sprintf("%v", kv.Value))
|
||
}
|
||
|
||
h := http.Header{
|
||
"Content-Type": []string{"application/x-www-form-urlencoded"},
|
||
}
|
||
|
||
uri := "https://sandbox.cdcc.cmbchina.com/AccessGateway/transIn/updateCodeStatusForMulti.json"
|
||
r := uri + "?" + uv.Encode()
|
||
|
||
respHeader, bodyBytes, err := request.Post(context.Background(), r, nil, request.WithHeaders(h), request.WithTimeout(time.Second*10))
|
||
if err != nil {
|
||
t.Error(err)
|
||
return
|
||
}
|
||
|
||
t.Logf("请求地址:%s", uri)
|
||
t.Logf("业务参数:%s", string(bizParmaJsonBytes))
|
||
t.Logf("请求响应体:%s", string(bodyBytes))
|
||
t.Logf("请求响应头:%+v", respHeader)
|
||
}
|