Files
order_site/测试用例.md
T
yml2213 a27419a0b2 feat: 实现快手电子凭证三个出站回调接口
- 新增 send-callback-service.ts: 卡券发码回调 (eticket/send)
- 新增 consume-callback-service.ts: 核销回调 (eticket/consume)
- 新增 destroy-callback-service.ts: 销毁回调 (eticket/destroy)
- 三个回调均在对应入站接口处理成功后异步触发(fire-and-forget)
- 共享 sendCallbackEnabled 开关控制,默认关闭
- 新增 accessToken 配置项(OAuth获取)
- 新增 scripts/curl-send-callback.ts: 手动测试 curl 生成脚本
- docker-compose 添加 KUASHOU_INDUSTRY_ACCESS_TOKEN / SEND_CALLBACK_ENABLED 环境变量
2026-07-02 13:44:25 +08:00

61 lines
10 KiB
Markdown
Raw 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.
第二部分 接口测试用例
2.4.2.2 电子凭证协议
商家请认真填写,调试完成后做成文档,发送给快手技术进行审核!!!
一、通知发码接口测试用例
测试场景 请求报文(商家填写) 响应报文(商家填写) 截图(商家补充)
收单成功(重要!!!) appkey=ks660621772091030245&version=1&timestamp=1782966971471&signMethod=MD5&param=%7B%22oid%22%3A%22SUCCESS_1782966971471%22%2C%22sellerId%22%3A%222174425348%22%2C%22num%22%3A2%2C%22itemId%22%3A%2220842040339391%22%2C%22skuId%22%3A%2287457167264391%22%2C%22itemTitle%22%3A%22%E6%B5%8B%E8%AF%95%E7%94%B5%E5%AD%90%E5%87%AD%E8%AF%81%22%2C%22sendType%22%3A%22VIRTUAL%22%2C%22eticketType%22%3A%22DINING_OPEN_TICKET%22%2C%22token%22%3A%22token-success-1782966971471%22%2C%22certExpireType%22%3A1%2C%22certStartTime%22%3A1782966971471%2C%22certEndTime%22%3A1814502971471%2C%22certActualStartTime%22%3A1782966971471%2C%22certActualEndTime%22%3A1814502971471%7D&sign=573c1159de0164632b97d7c38a3e17df {"result":1,"error_msg":"","data":{"oid":"SUCCESS_1782966971471","sendType":"VIRTUAL","sendNum":2,"etickets":[{"id":"67","status":"UNUSED","num":1,"validStartTime":1782966971471,"validEndTime":1814502971471,"eticketType":"DINING_OPEN_TICKET"},{"id":"68","status":"UNUSED","num":1,"validStartTime":1782966971471,"validEndTime":1814502971471,"eticketType":"DINING_OPEN_TICKET"}]}} 商家补充截图
拒单场景:appkey 未传入
(快手按 10s、30s、1min、2min、3min… 策略重试,最多 16 次) version=1&timestamp=1782966971487&signMethod=MD5&param=%7B%22oid%22%3A%22NOKEY_1782966971487%22%2C%22sellerId%22%3A%222174425348%22%2C%22num%22%3A1%2C%22itemId%22%3A%2220842040339391%22%2C%22sendType%22%3A%22VIRTUAL%22%2C%22token%22%3A%22token-nokey-1782966971487%22%2C%22certExpireType%22%3A3%2C%22certExpDays%22%3A30%2C%22certActualStartTime%22%3A1782966971487%2C%22certActualEndTime%22%3A1785558971487%7D&sign=6d07ef1b34dae634722085e69998d5ce {"result":4010003,"error_msg":"appkey 不匹配","data":null} 商家补充截图
拒单场景:签名错误
(快手按 10s、30s、1min、2min、3min… 策略重试,最多 16 次) appkey=ks660621772091030245&version=1&timestamp=1782966971496&signMethod=MD5&param=%7B%22oid%22%3A%22BADSIGN_1782966971496%22%2C%22sellerId%22%3A%222174425348%22%2C%22num%22%3A1%2C%22itemId%22%3A%2220842040339391%22%2C%22sendType%22%3A%22VIRTUAL%22%2C%22token%22%3A%22token-badsign-1782966971496%22%2C%22certExpireType%22%3A3%2C%22certExpDays%22%3A30%2C%22certActualStartTime%22%3A1782966971496%2C%22certActualEndTime%22%3A1785558971496%7D&sign=00000000000000000000000000000000 {"result":4010003,"error_msg":"签名验证失败","data":null} 商家补充截图
拒单场景:参数缺失(缺少 oid
(快手按 10s、30s、1min、2min、3min… 策略重试,最多 16 次) appkey=ks660621772091030245&version=1&timestamp=1782966971499&signMethod=MD5&param=%7B%22sellerId%22%3A%22123%22%2C%22num%22%3A1%2C%22sendType%22%3A%22VIRTUAL%22%7D&sign=154c203c15b779c708bc3a1e508ba78d {"result":4010003,"error_msg":"缺少 oid","data":null} 商家补充截图
二、查询发码结果接口测试用例
测试场景 请求报文(商家填写) 响应报文(商家填写) 截图(商家补充)
查询成功:返回卡券信息(全部卡券) appkey=ks660621772091030245&version=1&timestamp=1782966971504&signMethod=MD5&param=%7B%22oid%22%3A%22TEST_CASE_1782966971344%22%2C%22sendType%22%3A%22VIRTUAL%22%7D&sign=9a012f1aa5843082ee6ed63961bd3173 {"result":1,"error_msg":"","data":{"oid":"TEST_CASE_1782966971344","sendType":"VIRTUAL","sendNum":3,"etickets":[{"id":"64","status":"UNUSED","num":1,"validStartTime":1782966971344,"validEndTime":1785558971344},{"id":"65","status":"UNUSED","num":1,"validStartTime":1782966971344,"validEndTime":1785558971344},{"id":"66","status":"UNUSED","num":1,"validStartTime":1782966971344,"validEndTime":1785558971344}]}} 商家补充截图
查询成功:返回卡券信息(指定 eticketId appkey=ks660621772091030245&version=1&timestamp=1782966971509&signMethod=MD5&param=%7B%22oid%22%3A%22TEST_CASE_1782966971344%22%2C%22eticketId%22%3A%2264%22%2C%22sendType%22%3A%22VIRTUAL%22%7D&sign=2c49920c246566219d448e9837299d7f {"result":1,"error_msg":"","data":{"oid":"TEST_CASE_1782966971344","sendType":"VIRTUAL","sendNum":1,"etickets":[{"id":"64","status":"UNUSED","num":1,"validStartTime":1782966971344,"validEndTime":1785558971344}]}} 商家补充截图
查询失败:返回卡券不存在
必须返回错误码「4012005」 appkey=ks660621772091030245&version=1&timestamp=1782966971512&signMethod=MD5&param=%7B%22oid%22%3A%22TEST_CASE_1782966971344%22%2C%22eticketId%22%3A%2299999%22%2C%22sendType%22%3A%22VIRTUAL%22%7D&sign=90e584abb3d92a857175af1e8b235747 {"result":4012005,"error_msg":"卡券不存在: 99999","data":null} 商家补充截图
查询失败:订单不存在
必须返回错误码「4012002」 appkey=ks660621772091030245&version=1&timestamp=1782966971516&signMethod=MD5&param=%7B%22oid%22%3A%22NOT_EXIST_1782966971516%22%2C%22sendType%22%3A%22VIRTUAL%22%7D&sign=1a55c5588006c0de81122a213aac714c {"result":4012002,"error_msg":"订单不存在: NOT_EXIST_1782966971516","data":null} 商家补充截图
三、关单 / 销毁接口测试用例
测试场景 请求报文(商家填写) 响应报文(商家填写) 截图(商家补充)
关单/销毁成功(指定卡券 DESTROYED
(注意:不存在的订单,请返回关单成功) appkey=ks660621772091030245&version=1&timestamp=1782966971518&signMethod=MD5&param=%7B%22oid%22%3A%22TEST_CASE_1782966971344%22%2C%22reason%22%3A%22USER_APPLY_REFUND%22%2C%22etickets%22%3A%5B%7B%22id%22%3A%2264%22%2C%22num%22%3A1%2C%22goodsValue%22%3A100%7D%5D%7D&sign=098882a0a3ef3ccf4abe56aad9927f80 {"result":1,"error_msg":"","data":{"oid":"TEST_CASE_1782966971344"}} 商家补充截图
销毁后验证卡券状态为 DESTROYED appkey=ks660621772091030245&version=1&timestamp=1782966971525&signMethod=MD5&param=%7B%22oid%22%3A%22TEST_CASE_1782966971344%22%2C%22eticketId%22%3A%2264%22%2C%22sendType%22%3A%22VIRTUAL%22%7D&sign=72b9574b73af8353c5f060469b5213ad {"result":1,"error_msg":"","data":{"oid":"TEST_CASE_1782966971344","sendType":"VIRTUAL","sendNum":1,"etickets":[{"id":"64","status":"DESTROYED","num":1,"validStartTime":1782966971344,"validEndTime":1785558971344}]}} 商家补充截图
关单/销毁成功(整单销毁,不传 etickets appkey=ks660621772091030245&version=1&timestamp=1782966971528&signMethod=MD5&param=%7B%22oid%22%3A%22TEST_CASE_1782966971344%22%2C%22reason%22%3A%22ETICKET_EXPIRED%22%7D&sign=cda4984e91bef29e7aa1c65b4d208553 {"result":1,"error_msg":"","data":{"oid":"TEST_CASE_1782966971344"}} 商家补充截图
关单/销毁成功(订单不存在,也必须返回成功) appkey=ks660621772091030245&version=1&timestamp=1782966971538&signMethod=MD5&param=%7B%22oid%22%3A%22FAKE_DESTROY_1782966971538%22%2C%22reason%22%3A%22ETICKET_EXPIRED%22%7D&sign=b5c9ebf65c1b9d535d8dad0ac55775c4 {"result":1,"error_msg":"","data":{"oid":"FAKE_DESTROY_1782966971538"}} 商家补充截图
四、发码回调接口
📌 注意:该接口由商家发起。请调用快手线上地址,出现"订单不存在"即可视为调试通过!
接口: POST https://openapi.kwaixiaodian.com/integration/virtual/eticket/callback
测试场景 请求参数(商家提供) 请求报文(商家填写) 响应报文(商家填写) 截图(商家补充)
卡券发码 oid: "2319200000001216"
etickets: [{"id":"67","code":"","num":1,"status":"ISSUED"}]
token: "token-success-1782966971471" access_token=xxx&appkey=ks660621772091030245&method=integration.virtual.eticket.callback&param=%7B%22oid%22%3A%222319200000001216%22%2C%22etickets%22%3A%5B%7B%22id%22%3A%2267%22%2C%22num%22%3A1%2C%22status%22%3A%22ISSUED%22%7D%5D%2C%22token%22%3A%22token-success-1782966971471%22%7D&signMethod=MD5&timestamp=1782966971471&version=1&sign=xxx 调用快手正式环境,出现"订单不存在"即为通过 商家补充截图
五、核销回调接口(可选,取决商家选择的对接方案)
📌 注意:该接口由商家发起。请调用快手线上地址,出现"订单不存在"即可视为调试通过!
接口: POST https://openapi.kwaixiaodian.com/integration/callback/virtual/eticket/consume
测试场景 请求参数(商家提供) 请求报文(商家填写) 响应报文(商家填写) 截图(商家补充)
卡券核销 oid: "2319200000001216"
etickets: [{"id":"67","num":1,"goodsValue":10}]
status: "CONSUMED"
consumeType: "consume"
storeName: "测试门店"
storeAddress: "测试地址"
seriallNum: "SN202607020001"
token: "token-success-1782966971471"
consumeTime: 1782966971471 access_token=xxx&appkey=ks660621772091030245&method=integration.callback.virtual.eticket.consume&param=%7B%22oid%22%3A%222319200000001216%22%2C%22etickets%22%3A%5B%7B%22id%22%3A%2267%22%2C%22num%22%3A1%2C%22goodsValue%22%3A10%7D%5D%2C%22status%22%3A%22CONSUMED%22%2C%22consumeType%22%3A%22consume%22%2C%22storeName%22%3A%22%E6%B5%8B%E8%AF%95%E9%97%A8%E5%BA%97%22%2C%22storeAddress%22%3A%22%E6%B5%8B%E8%AF%95%E5%9C%B0%E5%9D%80%22%2C%22seriallNum%22%3A%22SN202607020001%22%2C%22token%22%3A%22token-success-1782966971471%22%2C%22consumeTime%22%3A1782966971471%7D&signMethod=MD5&timestamp=1782966971471&version=1&sign=xxx 调用快手正式环境,出现"订单不存在"即为通过 商家补充截图
六、销毁回调接口(可选,取决商家选择的对接方案)
📌 注意:该接口由商家发起。请调用快手线上地址,出现"订单不存在"即可视为调试通过!
接口: POST https://openapi.kwaixiaodian.com/integration/callback/virtual/eticket/destroy
测试场景 请求参数(商家提供) 请求报文(商家填写) 响应报文(商家填写) 截图(商家补充)
销毁成功 oid: "2319200000001216"
etickets: [{"id":"67","num":1,"goodsValue":100}]
reason: "ETICKET_EXPIRED"
token: "token-success-1782966971471" access_token=xxx&appkey=ks660621772091030245&method=integration.callback.virtual.eticket.destroy&param=%7B%22oid%22%3A%222319200000001216%22%2C%22etickets%22%3A%5B%7B%22id%22%3A%2267%22%2C%22num%22%3A1%2C%22goodsValue%22%3A100%7D%5D%2C%22reason%22%3A%22ETICKET_EXPIRED%22%2C%22token%22%3A%22token-success-1782966971471%22%7D&signMethod=MD5&timestamp=1782966971471&version=1&sign=xxx 调用快手正式环境,出现"订单不存在"即为通过 商家补充截图