156 lines
8.3 KiB
Go
156 lines
8.3 KiB
Go
package test
|
||
|
||
import (
|
||
"context"
|
||
"encoding/base64"
|
||
"encoding/json"
|
||
"errors"
|
||
"fmt"
|
||
"net/http"
|
||
"testing"
|
||
"time"
|
||
"voucher/internal/biz/bo"
|
||
"voucher/internal/biz/businesserr"
|
||
"voucher/internal/pkg/helper"
|
||
"voucher/internal/pkg/supplier/qixing"
|
||
"voucher/internal/pkg/wechat/utils"
|
||
)
|
||
|
||
func Test_MarketingSend(t *testing.T) {
|
||
tests := []struct {
|
||
name string
|
||
}{
|
||
{
|
||
name: "给指定用户报名多笔立减活动",
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
MarketingSend()
|
||
})
|
||
}
|
||
}
|
||
|
||
func Test_MarketingQuery(t *testing.T) {
|
||
|
||
appId := "wx619991cc795028f5"
|
||
openId := "oSNb4fixFZ4uRvcP6F25_FySgUE0"
|
||
couponId := "147079366189"
|
||
|
||
tests := []struct {
|
||
name string
|
||
appId, openId, couponId string
|
||
}{
|
||
{
|
||
name: "查询绑定多笔立减活动的代金券详情", // 查询的商户非创建方商户 查询商户要为创建方商户
|
||
appId: appId,
|
||
openId: openId,
|
||
couponId: couponId,
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
resp, err := MarketingQuery(tt.appId, tt.openId, tt.couponId)
|
||
if err != nil {
|
||
|
||
var e *utils.ApiException
|
||
if errors.As(err, &e) {
|
||
// 格式:{"code":"INVALID_REQUEST","message":"对应单号已超出重试期;请查单确认后决定是否换单请求"}
|
||
var beer *businesserr.BusinessErr
|
||
if err = json.Unmarshal(e.Body(), &beer); err != nil {
|
||
t.Errorf("微信错误返回body解析报错,body:%s,err:%s", string(e.Body()), err.Error())
|
||
}
|
||
t.Logf("MarketingQuery error,body:%s,err:%s", string(e.Body()), e.ErrCode)
|
||
} else {
|
||
t.Errorf("MarketingQuery() error = %v", err)
|
||
}
|
||
|
||
return
|
||
}
|
||
t.Logf("MarketingQuery() = %v", resp)
|
||
})
|
||
}
|
||
|
||
// 合单订单就是没有核销回调通知的
|
||
// {"code":"APPID_MCHID_NOT_MATCH","message":"商户号与AppID不匹配"}
|
||
// APPID_MCHID_NOT_MATCH 商户号与AppID不匹配 调用接口的商户号需与接口传入的AppID有绑定关系
|
||
|
||
//openid不是自己的appid下的喔,这也能查询到吗”
|
||
//不行的,需要是在自己appid下的才能查到
|
||
}
|
||
|
||
func Test_QixingNotifyDataDecodeString(t *testing.T) {
|
||
|
||
content := `eyJzdW1tYXJ5Ijoi5Luj6YeR5Yi45qC46ZSA6YCa55+lIiwiYXNzb2NpYXRlZF9kYXRhIjoiY291cG9uIiwiZXZlbnRfdHlwZSI6IkNPVVBPTi5VU0UiLCJjcmVhdGVfdGltZSI6IjIwMjUtMTItMjRUMTk6NDg6NDYrMDg6MDAiLCJwbGFpbl90ZXh0Ijp7InN0b2NrX2NyZWF0b3JfbWNoaWQiOiIxNzE1MzQ5NTc4Iiwic3RvY2tfaWQiOiIyMTQzODg1MSIsImNvdXBvbl9pZCI6IjE0NDQ2MTIyOTg5MCIsInNpbmdsZWl0ZW1fZGlzY291bnRfb2ZmIjpudWxsLCJkaXNjb3VudF90byI6bnVsbCwiY291cG9uX25hbWUiOiLpk7booYzljaHlpJrnrJTnq4vlh48iLCJzdGF0dXMiOiJVU0VEIiwiZGVzY3JpcHRpb24iOiIiLCJjcmVhdGVfdGltZSI6IjIwMjUtMTItMThUMTU6NDQ6NTIrMDg6MDAiLCJjb3Vwb25fdHlwZSI6Ik5PUk1BTCIsIm5vX2Nhc2giOmZhbHNlLCJhdmFpbGFibGVfYmVnaW5fdGltZSI6IjIwMjUtMTItMThUMDA6MDA6MDArMDg6MDAiLCJhdmFpbGFibGVfZW5kX3RpbWUiOiIyMDI2LTAxLTE2VDIzOjU5OjU5KzA4OjAwIiwic2luZ2xlaXRlbSI6ZmFsc2UsIm5vcm1hbF9jb3Vwb25faW5mb3JtYXRpb24iOnsiY291cG9uX2Ftb3VudCI6MzAwLCJ0cmFuc2FjdGlvbl9taW5pbXVtIjoxODAwfSwiY29uc3VtZV9pbmZvcm1hdGlvbiI6eyJjb25zdW1lX3RpbWUiOiIyMDI1LTEyLTI0VDE5OjQ4OjQ2KzA4OjAwIiwiY29uc3VtZV9tY2hpZCI6IjEyNzQ5Mzg2MDEiLCJ0cmFuc2FjdGlvbl9pZCI6IjQyMDAwMDI5MTcyMDI1MTIyNDgzODQ2MTg0MzgiLCJjb25zdW1lX2Ftb3VudCI6MzAwLCJnb29kc19kZXRhaWwiOm51bGx9fSwicmVzb3VyY2VfdHlwZSI6ImVuY3J5cHQtcmVzb3VyY2UiLCJvcmlnaW5hbF90eXBlIjoiY291cG9uIiwiaWQiOiI4NzkxZTMyZS0zYjFiLTViNDktYTNiNi1mYzY0YTc5NTVlZjEifQ==`
|
||
|
||
b, err := base64.StdEncoding.DecodeString(content)
|
||
if err != nil {
|
||
t.Errorf("base64.StdEncoding.DecodeString() error = %v", err)
|
||
return
|
||
}
|
||
|
||
t.Log(string(b))
|
||
}
|
||
|
||
func Test_QixingNotifyData(t *testing.T) {
|
||
|
||
//wxBody := `{"id":"4ab2699d-e91d-5460-9810-25fd6d4c69a5","create_time":"2025-12-08T17:54:24+08:00","resource_type":"encrypt-resource","event_type":"COUPON.USE","summary":"代金券核销通知","original_type":"coupon","associated_data":"coupon","plain_text":{"stock_creator_mchid":"1652465541","stock_id":"21386484","coupon_id":"142388354994","coupon_name":"银行卡多笔立减","description":"","status":"SENDED","create_time":"2025-12-08T17:50:48+08:00","coupon_type":"NORMAL","no_cash":false,"singleitem":false,"business_type":"","consume_information":{"consume_time":"2025-12-08T17:54:24+08:00","consume_mchid":"1274938601","transaction_id":"4200002996202512083063051834","consume_amount":16}}}`
|
||
wxBody := `{"id":"4ab2699d-e91d-5460-9810-25fd6d4c69a6","create_time":"2025-12-08T17:54:24+08:00","resource_type":"encrypt-resource","event_type":"COUPON.USE","summary":"代金券核销通知","original_type":"coupon","associated_data":"coupon","plain_text":{"stock_creator_mchid":"1652465541","stock_id":"21386484","coupon_id":"118758145502","coupon_name":"银行卡多笔立减","description":"","status":"USED","create_time":"2025-12-08T17:50:48+08:00","coupon_type":"NORMAL","no_cash":false,"singleitem":false,"business_type":"","consume_information":{"consume_time":"2025-12-08T17:54:24+08:00","consume_mchid":"1274938601","transaction_id":"4200002996202512083063051834","consume_amount":16}}}`
|
||
t.Log(len(wxBody))
|
||
|
||
content := base64.StdEncoding.EncodeToString([]byte(wxBody))
|
||
|
||
ciphertext := helper.Md5(content + "DrY1zLkOH01q0sN66vrmkdpbWsyb41ho")
|
||
|
||
req := qixing.QiXingRequestBo{
|
||
Content: content,
|
||
Timestamp: time.Now().UnixMilli(),
|
||
Ciphertext: ciphertext,
|
||
}
|
||
|
||
b, _ := json.Marshal(req)
|
||
|
||
t.Log(string(b))
|
||
// {"content":"base64(微信通知json对象数据)","timestamp":1765447477945,"ciphertext":"md5(base64(微信通知json对象数据)+key)"}
|
||
//t.Logf(`{"content":"%s","timestamp":122345677890,"ciphertext":"%s"}`, content, ciphertext)
|
||
}
|
||
|
||
func Test_MarketingNotify(t *testing.T) {
|
||
|
||
bodyBytes := []byte(`{"id":"0e92e862-66b0-55a3-b1da-0e54a820b923","create_time":"2026-03-27T14:20:12+08:00","resource_type":"encrypt-resource","event_type":"COUPON.USE","summary":"代金券核销通知","resource":{"original_type":"coupon","algorithm":"AEAD_AES_256_GCM","ciphertext":"LFFqFfGIu1uHYbKwqxND29QS7sH54U1k9uj+W5ecKf0ZzBT8YzikcSqa6W0iIcpnlQE0AJkDxs/nfJQ/pcRJajwy+4JzE8fzrMmhn1vgvUiXt+EyvJ8mPJwfVMtg8YtMuQBUUPxIyc5ACZVawGDVlwG9nxFYCGF0jZAtzKdwZw2MMmGFTCJri6kCE60hic5Yn3b9iPaCwmXdFlVKA6NozMEp2uNoQYYzy1+OEAfyXHyspz0IQnhUFcVuxfnGbK4zJQYUZ8yGhg3YfNFTtDW0vRTBwkNeR8BWy/LXSKMZJ7sC+SaX7eASd0QHXA/UPWpItCQGRDeZHUXWEQw6yB3GpHfKRTlO5H7VINLVe9pj+XWnXMzDEqDShpUnCP3cgf7TBYykopXPKXfI/bekTxy6ZWbikQH1Ts9lc/AMqd3NK7H5AmQPNld6DkBkt1jgI/DP5tUJeyQyYX39fX0pJCFpy94AQhXyPXLKT2VQHmnX3qnaQyztgY7GfvavtmgTNFunKcnqXtgU65wpg156iTGhHyoG01msdoUMjynY7pbdUHM1O/ljsizysqiGBvYaDfhx4Mcf8Fd3kT5bbuelM2DLg7nycz9ZjPrsKWz47eNG2U3hixk6yVxrBpAsO4QM7/ngB1+5Z7Pv06nSoP7jnFxIMv9iwPn5Y+O5tb1JfO/2su7UTtDcY25iJBqiKJvwgtzy9IB1hR781PPNzHVDT9ORUfJVVlrkGgaOn7aMDyzv3DYYUkK0fTENAReCa7D/wrajM6U6Gu8Z1/TfKkJ9BdwbEqI=","associated_data":"coupon","nonce":"b2AW4NUIk2AX"}}`)
|
||
|
||
header := `{"Accept":["*/*"],"Cache-Control":["no-cache"],"Connection":["close"],"Content-Length":["1109"],"Content-Type":["application/json"],"Pragma":["no-cache"],"User-Agent":["Mozilla/4.0"],"Wechatpay-Nonce":["OaVm4rYgmQnOzu9dra2OM9J560D5uuLh"],"Wechatpay-Serial":["PUB_KEY_ID_0111000406952026032500382251001000"],"Wechatpay-Signature":["QUnj2WwPfh3nAycuwQ/7zFVjhSHObnFfmfLnPx/4UXjgFlkY1REyCHrBHrJ1lDpUOodiY5qsGg/7CQ6aMlXZe24xsLOBjwOgZr0JGmsRisrwnQL+jy6ar8pAf1fABv+e/lCLO+UZtLXrv1GCQix51GLerkELEVTQkn6qzT4aVyL1Ukte6hk+r3HlWOQC6OM3cpxyr8XhVilGWaElRCgPwHI2XYLGjH6QWtcRnCSMESLFGOwI7t9GbxgGLptEelfmVpBHdRFTDWa8rWJI7b9ArI//vMawkJUE7tW5nkqF5sWMydKUQ5ZDLf5oI447zic/LOljZ4SA7I/aTN4MlpulDA=="],"Wechatpay-Signature-Type":["WECHATPAY2-SHA256-RSA2048"],"Wechatpay-Timestamp":["1774592412"],"X-Forwarded-For":["121.51.58.169"],"X-Real-Ip":["121.51.58.169"]}`
|
||
|
||
httpHeaders := make(http.Header)
|
||
if err := json.Unmarshal([]byte(header), &httpHeaders); err != nil {
|
||
fmt.Printf("headers Unmarshal err: %+v\n", err)
|
||
return
|
||
}
|
||
|
||
body, bizContent, err := marketingFJLF().Notify(context.Background(), &httpHeaders, bodyBytes)
|
||
if err != nil {
|
||
t.Errorf("notify err: %+v\n", err)
|
||
return
|
||
}
|
||
|
||
var plainText bo.PlainText
|
||
if err = json.Unmarshal([]byte(bizContent), &plainText); err != nil {
|
||
t.Errorf("Unmarshal err: %+v\n", err)
|
||
return
|
||
}
|
||
|
||
notifyBo := bo.WechatVoucherNotifyBo{
|
||
ID: body.Id,
|
||
CreateTime: body.CreateTime,
|
||
ResourceType: body.ResourceType,
|
||
EventType: body.EventType,
|
||
Summary: body.Summary,
|
||
OriginalType: body.Resource.OriginalType,
|
||
AssociatedData: body.Resource.AssociatedData,
|
||
PlainText: plainText,
|
||
}
|
||
|
||
fmt.Printf("bizContent: %s\n", bizContent)
|
||
fmt.Printf("notifyBo: %+v\n", notifyBo)
|
||
}
|