通过一个二维码完成多种第三方支付方式的支付需求:
商家打印静态二维码。 用户使用支付宝、微信、百度等App扫描二维码后,进入商户支付页面,输入金额,完成支付。
其技术实现如下:
生成二维码
通常线下场景是一个店铺一个二维码,所以生成二维码时最好加上店铺id参数。 您可以通过统一的商户号轻松定位交易来自哪家商户、结算到哪家商户以及支付成功后通知哪家商户。 一般建议生成二维码的URL不要太长。 长度越短,生成的二维码识别率越高。
扫码识别
用户扫码时,可能有多种软件可供扫描,但只有支付宝客户端可以处理支付宝交易。 因此,需要识别扫码来源,并在页面上提供提示,引导用户使用支付宝扫码。 用户用App扫描商户二维码后,实际上是使用App浏览器打开商户页面。 商家的页面通过在浏览器中识别用户来确定哪个应用程序打开了它。
常见App浏览器的用户识别关键字:
如果识别出不包含,则会跳转到错误提示页面,并引导用户使用支付宝扫描二维码。
支付宝扫描二维码成功后,店铺ID会提交给开发者服务器,可以保存在或者放在下一步的授权回调地址参数中。
获取用户信息
成功扫描二维码后,您需要获取先扫描二维码的用户身份,否则无法下单。
获取用户是利用支付宝的用户信息授权来实现的。
简单来说,可以通过以下五个步骤来实现:
拼接授权地址,包括授权范围和回调地址(授权范围使用this =,回调地址可以包含一些参数:比如店铺ID); 让用户的浏览器跳转到授权地址。 授权后,用户浏览器会请求回调地址; 授权后回调地址会收到参数; 使用参数进行交换()订单接口暂时无法使用,只需要使用值); 用它来获取用户授权信息(开发者一般不需要这一步,授权范围=可以用来获取用户的更多信息);
通过以上步骤,您可以查看网页进行授权并获取用户信息。
收到后,您就可以下订单进行下一步。
服务器获取后,可以保存或者返回到用户页面,以隐藏字段表单,向用户页面显示支付页面。
下订单
由于一码多支付解决方案是最简单的方法,因此收银员无需输入金额。
因此,支付页面需要有一个输入框,供用户填写支付金额并提交表单发起支付。
目前有店铺ID、付款人、交易金额。 开发者可以通过店铺ID查看系统中配置的收款人账户信息。 此时使用统一收单交易创建接口发起订单。 订单成功下单后,支付宝将返回支付宝交易号,并使用呼叫柜台支付方式让用户付款。
服务器组装脚本和订单号并将其返回到用户的浏览器。 用户的支付宝浏览器会自动执行JS并调用收银台,让用户选择支付渠道并输入密码完成支付。
完成支付后,用户页面将跳转至支付宝统一支付成功页面。
获取收银结果
服务器获取用户支付状态有两种方式:
投票结果
服务器发起订单后,在异步子线程中向支付宝发起交易查询请求。 它每 5 秒检查一次,持续 1 到 2 分钟。 一旦发现支付成功,则终止。 如果超时后仍未支付,则发起交易取消请求。 ,避免用户离店付款时出现单方账户纠纷。
异步通知
下单时,按照文档传入交易创建接口中的公共参数,支付成功后支付宝会向该地址发起回调支付结果。
如需获取异步通知支付结果,您可以查看扫描二维码支付的异步通知说明。
通知收银服务器获得支付成功结果后,需要通知收银员(直接让用户用手机给收银员看支付结果是有风险的,例如:用户截图欺骗收银员)支付成功,或者用户支付成功但商户未入账)。
最简单的方式就是调用短信接口通知本店收银员。 如果开发者之前没有搭建过自己的短信发送通道,可以查看阿里云短信通知解决方案。