收银台界面 -- 支付方式测试开坑

前言

第一次接触支付系统测试时,原本以为可以轻松撰写一篇博客,因为测试前我也在网上查找了一些其他人的经验分享,发现大多只是浅尝辄止,讨论的测试场景较为简单。然而,在与同事交流后,我意识到支付测试远不止于此,它涉及到商品锁定库存、解锁库存(将库存信息存储到Redis并在失败时刷新释放)、发票处理、红冲操作以及月结付款等复杂业务逻辑。

因此,本文仅仅是支付测试系列的开篇之作,后续学到新知识会继续分享。

收银台支付方式初始方式

  • 我们公司的支付方式是后台配置:
    在这里插入图片描述
    每种支付方式会因为商户类型、渠道以及产品类型的不同而传递不同的参数。由于我需要测试的是手机渠道且商户类型是相同的,因此我只需要考虑产品类型的不同即可。
  • 接口初始化收银台界面
    在这里插入图片描述
    在这里插入图片描述

测试场景

根据支付方式的初始化逻辑,我们可以构建一个基本的支付测试场景
在这里插入图片描述

细化支付场景

支付流程

选择支付方式:
正常

  • 验证各种支付方式是否可以正常支付,各支付方式走完一个简单的支付流程
  • 提示信息是否合理,订单状态是否改变

异常

  • 支付时结合优惠券/折扣券/促销价抵扣进行相关的抵扣,验证规则正确,并且可以正常抵扣和支付
  • 支付失败,系统的逻辑是否和需求一致
  • 手机没有安装对应的支付方式,系统如何处理
  • 重复点击支付按钮(防止系统发起多次支付请求)
  • 支付中断的场景,主动中断以及被动中断。主动中断包括用户取消支付,此时须验证系统的逻辑是否和需求一致;支付超时 - 支付页面停留时间超过可支付的时间,此时支付系统的逻辑否和需求一致;关闭应用,此时订单是否是待付款状态还是其他的状态;返回上一步,用户在支付流程中选择返回到之前的步骤,验证此时的系统的逻辑。被动中断包括断网、电话等(时间不够可以不测)。

退款流程

正常

  • 点击退款可以退款成功,并且检查交易状态是退款,退款金额可以到账
  • 结合优惠券等抵扣,可以退款实际支付金额

异常

  • 提交错误退款(退款订单号不对),或者退款金额错误,都能够退款失败(此处一般会借助工具进行mock测试)

签名有关知识

签名作用

签名是一种基于加密算法生成的字符串,用于验证消息的真实性和完整性。具体来说,在三方支付中,签名用于确认交易请求和响应数据的合法性和未被篡改。

签名与与防止重复支付的关系

结论:关系不大
起先和同事讨论时他和我讲测试支付时还需要验证签名的唯一性与时效性,为的是防止重复支付,比如我在app端下了一单到了收银台界面,拉起了三方支付,此时去网页端支付订单,如果签名不唯一的话app再支付就可能会出现重复支付的情况。
我就去抓包试了一下,app端和网页端的签名确实是不一致的,但是导致不一致的原因有很多:

  • 不同的时间戳或随机数:每次请求时可能会包含不同的时间戳或随机数,这会导致即使对于相同的订单,生成的签名也会不同
  • 环境差异:App端和网页端可能是由不同的服务器或者不同的API版本处理请求,因此它们可能使用不同的密钥、算法或者其他参数来生成签名
  • 额外数据:两个端口可能在签名过程中包含了不同的额外数据或字段,这些细微的不同也会影响最终生成的签名值
  • 签名生成规则:不同平台(如App端与网页端)可能有不同的签名生成规则,包括但不限于使用不同的哈希算法、不同的排序方式等。

后面查了一下防止跨平台会不会出现重复支付的方法主要是幂等性接口设计,幂等性意味着无论客户端发送多少次相同的请求,服务器端的响应和状态变更都只会发生一次。

Tips

  • 测试支付有时是需要自己付钱的,注意问一问之前测过的同事退款方法
  • 记得把身份证和银行卡带着,以备测试时的需要

总结

我也是第一次测试支付,一开始完全不知道怎么测,网上找了博客总是感觉没讲到重点,之后从代码实现的角度思考,再问了开发一些问题,向同事求教,总算是深入了一点~
年底了,各项目都要封版了,后面就随缘一两周吧~

<think>好的,我现在需要处理用户关于支付收银台小程序源码和实现方式的查询。首先,用户提到的“收银台”通常指的是支付过程中用户选择支付方式并完成支付界面。根据用户提供的引用内容,特别是引用[3]和[4],支付宝的H5和小程序收银台实现可能涉及调用预下单接口获取支付链接,然后跳转到该链接以唤起支付宝的收银台。 用户引用的内容中提到,H5调用支付收银台是通过预下单接口获取payUrl,然后跳转到这个URL。而小程序调用则是通过同样的接口获取短链,再跳转以拉起小程序。此外,引用[4]提到的三勾点餐系统支持多端发布,包括支付宝小程序,这可能涉及到uniapp框架的使用,但具体源码是否公还不清楚。 接下来,我需要确认支付宝官方是否提供收银台小程序的源码或详细教程。根据支付放平台的文档,通常他们会提供SDK和API文档,但可能不会直接提供完整的源码。发者需要根据文档集成支付功能。例如,引用[3]中提到的预下单接口和跳转方式发者需要在自己的小程序中实现这些步骤。 可能还需要考虑小程序支付的不同场景,如App支付、手机网站支付等,这些在引用[1]和[2]中也有所提及。特别是抖音小程序的例子中,虽然支付宝和微信支付被集成,但具体的实现代码需要参考各自的发文档。 用户的需求是寻找源码或实现教程,因此正确的做法是引导他们查阅支付宝官方文档,并说明基本的实现步骤,比如创建小程序、配置支付权限、调用接口等。同时,可能需要提到第三方系统如三勾点餐,但需注意是否源或需要购买。 需要验证支付宝小程序发文档中是否有收银台相关的具体指南,以及是否有示例代码可供参考。此外,检查是否有社区或论坛分享过相关源码,但需注意合规性和安全性,推荐官方渠道。 总结回答时应分步骤说明实现方式,强调官方文档的重要性,并提示第三方系统的存在,同时生成相关问题帮助用户深入探索。</think>### 支付收银台小程序的实现方式 支付收银台小程序的实现主要依赖支付放平台的接口能力,需结合小程序发框架(如支付宝原生或跨端框架)完成集成。以下是关键步骤和资源指引: --- #### **1. 支付放平台注册与配置** - **注册发者账号**:前往[支付放平台](https://open.alipay.com/)注册账号,完成企业实名认证[^1]。 - **创建小程序**:在控制台创建小程序应用,获取 `APPID`,并配置小程序基本信息(如名称、图标)。 - **支付权限**:在“功能列表”中申请“小程序支付”能力,需提交营业执照等资质文件[^3]。 --- #### **2. 集成支付功能** 支付收银台支付流程通常分为两步: 1. **调用预下单接口**:通过服务端请求支付宝接口(如 `alipay.trade.create`)生成交易订单,返回支付参数(如 `trade_no` 或 `payUrl`)。 2. **前端跳转支付**:小程序前端根据返回的支付参数唤起支付收银台。 ##### **示例代码(服务端)** ```python # 使用Python SDK调用预下单接口(示例) from alipay import AliPay alipay = AliPay( appid="你的APPID", app_private_key_string="应用私钥", alipay_public_key_string="支付宝公钥" ) # 生成支付参数 order = alipay.api_alipay_trade_create( subject="订单标题", out_trade_no="商户订单号", total_amount="100.00", notify_url="异步回调地址" ) pay_url = order.get("pay_url") # 获取收银台跳转链接 ``` ##### **示例代码(小程序前端)** ```javascript // 小程序中跳转至支付收银台 my.tradePay({ tradeNO: '支付宝交易号', // 从服务端获取 success: (res) => { if (res.resultCode === '9000') { console.log('支付成功'); } } }); ``` --- #### **3. 官方发文档** - **小程序支付文档**: 参考[支付宝小程序支付发指南](https://opendocs.alipay.com/mini/introduce/pay),包含接口说明、参数规范及错误码。 - **服务端SDK下载**: 支付宝提供Java/Python/PHP等语言的SDK,可在放平台“文档中心 > 下载中心”获取[^3]。 --- #### **4. 第三方源参考** 若需快速实现,可参考支持支付宝小程序的**源项目**,如引用[4]提到的三勾点餐系统(基于ThinkPHP+Uniapp)。其核心逻辑包括: 1. 多端适配:通过Uniapp编译生成支付宝小程序。 2. 支付模块:封装支付宝SDK,处理订单生成、签名验证、回调通知等[^4]。 --- #### **注意事项** - **域名配置**:若涉及H5支付,需在支付宝商户平台配置授权域名(如 `snssdk.com`)[^2]。 - **沙箱测试**:正式上线前使用支付宝沙箱环境调试支付流程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值