开发者社区> 问答> 正文

#支付宝 如何实现一码多付?

如何实现一码多付

展开
收起
保持可爱mmm 2020-05-05 23:16:31 1106 0
1 条回答
写回答
取消 提交回答
  • 通过一个二维码完成多种第三方支付方式支付的需求:

    商户打印一个静态的二维码,顾客用app(比如支付宝、微信、百度钱包)扫这个二维码后,进入商户的一个付款页面,输入金额后,完成支付。

    其技术实现方式如下: 第一步:生成二维码

    通常线下场景是一个门店一个二维码,因此生成二维码时最好加入门店id参数。可以方便使用统一门店编号定位到是哪个商户的交易,结算给哪个商户,收款成功后通知给哪个商户。一般建议生成二维码的url不要太长,长度越短则生成的二维码识别率越高。 第二步:扫码识别

    用户扫码时,可能会有许多种软件来扫,但能够处理支付宝交易的却只有支付宝客户端。因此需要做识别扫码来源并在页面作出提示,引导用户用支付宝扫码。用户用app扫商户的二维码后,其实是用app浏览器打开到商户的页面, 商户页面通过识别浏览器header中的user-agent来判断是哪个app打开的。

    常见App浏览器的user-agent 识别关键字:

    支付宝: AlipayClient
    微信: MicroMessenger
    

    如果识别到不包含AlipayClient,则跳转到错误提示页面,引导用户用支付宝扫码。

    支付宝扫码成功后,会将门店id提交到你的服务端,你可以存在session中或放在下一步你的授权回调地址参数中。 第三步:获取用户信息

    扫码成功后,需要先获取到扫码用户的userid,不然下一步下单无法进行。

    获取用户是使用支付宝的用户信息授权实现。

    简单来说分为以下五步实现:

    拼接你的授权地址,包含授权范围和回调地址 (授权范围用这个scope=auth_base,回调地址中你可以包含一些参数:如门店id);
    让用户浏览器跳转到授权地址,授权后用户浏览器会请求你的redirect_uri回调地址;
    授权后你的redirect_uri回调地址会收到auth_code参数;
    你使用auth_code参数去换取user_id和access_token (access_token下单接口暂时使用不上,只需要使用user_id值);
    使用access_token可以去获取用户授权信息(这一步开发者一般用不上,授权范围为scope=auth_user时使用,可以获取用户更多信息);
    

    以上几个步骤可以参考【网页授权获取用户信息】。

    拿到user_id后可以给下一步下单使用。

    服务端拿到user_id后,user_id可以存session,也可以返回给用户页面隐藏域表单,并给用户页面显示付款页面。 第四步:下单

    由于一码多付方案都是最简便方式,没有收银员输入金额的流程。

    所以付款页面需要有输入框让用户填写付款金额,并提交表单发起付款。

    目前已有了门店id,付款方userid,交易金额,开发者可以通过门店id在你的系统中查到配置的收款方账号信息。此时使用【统一收单交易创建接口】发起下单,下单成功后,支付宝会返回支付宝交易号,使用【JSAPI唤起收银台支付】让用户付款。

    服务端将脚本和订单号组装好返回给用户浏览器,用户支付宝浏览器会自动执行js并唤起收银台,让用户选择付款渠道和输入密码,完成付款。

    完成付款后,用户页面会跳转到支付宝统一的付款成功页面 第五步:获取收银结果

    服务端获取用户的付款状态有两种方式:

    1、轮训查询

    服务端发起下单后就异步子线程向支付宝发起【交易查询】请求,每隔5秒查一次,查1-2分钟,一旦查到付款成功则终止,如果超时了还未付款,则发起【交易撤销】请求,避免用户在离店之后付款产生单边账纠纷。

    2、异步通知

    下单时,根据文档在交易创建接口中传递notify_url公共参数,则付款成功后支付宝会给这个notify_url地址发起回调付款结果。

    获取异步通知付款结果可以参考【扫码支付异步通知说明】文档。

    第六步:通知收银台服务端获取到付款成功的结果后,需要通知收银员(直接让用户拿手机付款结果给收银员看是有风险的,如:用户拿付款成功的截图欺骗收银员,或用户付款成功但商户未入账。)。

    最简单的方式是调用短信接口通知这个门店的收银员。如果你之前没有自建短信发送渠道,可以参考使用 阿里大于短信通知方案

    2020-05-06 09:24:54
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
58到家支付系统架构与实践 立即下载
直达客户 贴身服务——通信在快递场景中的应用 立即下载
核心:线下支付技术集成关键点 立即下载