voucher/test/cmb_test.go

167 lines
5.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}