谈谈扫码支付的实现流程

平常我们在购物付款时,使用手机中的微信或支付宝扫一扫即可完成支付,无需像以前携带现金等着商户找零钱。线下扫码支付大大的提高了我们付款的效率,今天就主要谈一谈扫码支付的实现流程,让我们享受快捷的同时,也了解其中的原理。

  二维码——信息的载体

  说起扫码支付,就不得不提二维码。线下所有的扫码支付都是以扫二维码开始,通过扫描二维码,我们可以看到付款页面商家的名称,所以二维码在这里承担的角色是——信息的载体,它通过黑白相间的排列组合记录信息。不止是支付,我们看到很多APP的下载链接,也是用二维码的形式记录链接地址。现在网上有很多现成的工具,输入一段内容后,即可把内容生成二维码,所以生成二维码这一步的实现流程不存在技术难题。

  选择二维码作为付款信息的载体,一方面是受收银台扫描商品一维码来识别商品,这一场景的启发,另一方面是二维码本身可存储足够大的数据信息,而且支持不同的数据格式,同时二维码有一定的容错性,部分损坏后仍可正常读取。这一切,使得二维码成为了被大众广泛使用的信息载体。

  二维码识别——APP校验及后台解析

  二维码携带的信息,我们无法通过肉眼识别,不同的支付机构在二维码中注入的信息规则不一致,需要对应的服务器根据其编码规则解析。我们每次使用扫一扫识别二维码后,都会提示“正在处理中”,意味着后台服务器正在解析这个二维码的内容,比如核对二维码携带的链接地址是否合法(像微信解析出是支付宝的链接会屏蔽)、是属于支付链接还是属于外链网址等。

  校验的规则很多,就支付链接来说,服务器校验属于自己公司的支付链接后,会获取支付链接中包含的商户信息,进而判断该商户是否存在、商户状态是否正常等,所有校验通过后,后台服务器会把商户名称返回到发起用户的手机APP上,同时告诉APP,服务器校验通过了,APP你可以调起收银台了。

  于是我们确定支付,输入支付密码,后台继续校验支付密码的正确性,正确的话支付就此完成。

  扫码支付流程的关键步骤

  从这个过程来看,要实现扫码支付的流程,最关键的是要定义允许识别哪些类型的二维码以及后台的校验逻辑。

  定义允许识别哪些类型的二维码。也就是说,当APP扫一扫,如果产品经理定义,发现二维码携带的信息是别家的网址“https://www.tina.com”,就在我们APP这边进行过滤,比如只要不是以“https://www.wx.com”开头的,不去请求服务器。所以,有些时候,明明是网址,但是解析后你看到的是一串纯文本。

  比如定义支付链接的格式为“https//qr.wx.com……”,每次检测到该链接开头的,就请求服务器去校验该支付链接的有效性。

  此外,还需要定义平台自有的解析规则,如微信识别为付款码是以13开头,微信检测到数字内容是以13开头的,会先去匹配其是否符合付款码的规则,符合的话才会进行后续的解析,如下图所示:

  以上说的是主扫,也就是用户扫商家;对于商家扫用户,原理是一样的,只不过用户的付款码中包含的是识别该用户的专属ID,商家通过收银系统向微信或支付宝提交订单时,把扫码枪识别出来的信息传递给微信或支付宝,他们根据这个专属ID找到对应的用户,通过代扣直接就扣款了。

原文地址:https://www.cnblogs.com/veggiegfei/p/10425743.html

时间: 2024-10-19 10:17:34

谈谈扫码支付的实现流程的相关文章

微信开发笔记:微信扫码支付详解

作为一个PC端的在线购物类网站,具备微信支付的功能自然是必须要有的,那么我们就来详细的看一下微信支付平台提供的微信扫码支付的使用流程: 首先你必须要有一个完成认证的服务号,申请开通微信支付功能,我们可以获得appid 和mch_id (也称为partnerid),之后就会是一个向微信支付平台提交一个支付请求来换取一个支付链接的过程: class wxpay{ function __construct(){ $this->wxpay(); } function wxpay(){ } /** * 生

微信支付之扫码支付

选择支付模式 点开链接先去了解一下微信支付模式: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=2_1 web一般选择都是扫码支付. 类似于这个: 准备账号 公众账号ID(AppID) 首先要申请一个公共账号,最好申请的时候就是服务号,因为微信支付的前提必须是服务号 如果是公众号需要先申请验证才能升级为服务号. 下面链接可以帮助你去找到这个账号: http://jingyan.baidu.com/article/22fe7c

微信支付 全套流程看完就会 pc扫码支付

一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微信会通过邮件把Mail转给你的,有了这些信息之后,我们就可以去微信支付服务支持页面:https://pay.weixin.qq.com/service_provider/index.shtml 打开这个页面,点击右上方的链接[开发文档]会进入到API文档说明页面,看起来如下 选择红色圆圈的扫码支付就

关于微信扫码支付的流程

前言:由于没有商户相关的id信息,只能测试这个扫码的功能,但是这个也是我们日常常用到的功能 (一) 前期准备 从微信官方网站下载最新的支付的接口 1.首先在:https://pay.weixin.qq.com/wiki/doc/api/native_sl.php?chapter=11_1  平台下载第三方接口文件(我下载的是PHP) 2.把项目放到入口文件中去查看效果(如下) 3.点击扫码支付(注意路径问题) 这是模式二无法显示图片,但是其实也是不影响我们项目的运行的 (二) 集成到我的项目中去

微信原生支付 Native扫码支付( V3.3.7 版本)

[尊重别人的劳动成果,转载请注明出处:一缕晨光工作室,www.wispdawn.com] 前言 辛苦研究三天,遇到各种困难,最终还是克服了,把我的理解和思路分享给需要帮助的人,如果你觉的好,请帮我分享一下,谢谢. 在没有做之前,我以为和支付宝,以及银联一样,会在官网找到相应的demo,照葫芦画瓢即可,没有什么复杂的,真正去做的时候,发现各种错误,很多时候都莫名其妙找不到北, 在网上搜了不知道多少遍,有V3版的,不过都是js api版本的,没有找到原生扫码支付,下了几个V2版本的微信支付c#dem

微信公众号 扫码支付 模式二 demo

扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 用户扫描商户展示在各种场景的二维码进行支付. 步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码(如图6.1),展示在各种场景,用于用户扫描购买. 步骤2:用户使用微信"扫一扫"(如图6.2)扫描二维码后,获取商品支付信息,引导用户完成支付(如图6.3). 图6

JAVA微信扫码支付模式二功能实现以及回调

一.准备工作 首先吐槽一下微信关于支付这块,本身支持的支付模式就好几种,但是官方文档特别零散,连像样的JAVA相关的demo也没几个.本人之前没有搞过微信支付,一开始真是被它搞晕,折腾两天终于调通了,特此写下来,以享后人吧! 关于准备工作,就"微信扫码支付模式二"官方文档地址在这 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 可以先看看,实际上需要准备的东西有以下几个: 其中APP_ID和APP_SECRET

扫码支付即将成为过去式?刷脸支付将带来更大风暴

马云在德国的汉诺威IT博览会(CeBIT)上刷脸买礼物事件已经过去两年有余,近日,网上流出的一则支付宝刷脸支付视频再次将这项新技术推向了高潮.犹记当时的Smile to Pay扫脸技术招致了满屏的质疑和讥讽,这次刷脸支付视频的风靡却向大众抛出了一个新的问题:刷脸支付时代真的即将到来?支付宝即将掀起一个更风暴的支付时代? 互联网发展日新月异,两年足以更新迭代,唤醒一个面貌全新的世界,人脸识别技术在这两年里已经逐步走向成熟.说到人脸识别技术,这里有必要先为大家进行一个小科普. 揭开人脸识别技术的神秘

ThinkPHP微信扫码支付接口

最近折腾微信扫码支付,看了微信官方文档,找了很多网页,发现和文档/demo不匹配,现在自己算是弄出来了(文件名称有所更改),贴出来分享一下 一.将有用的官方lib文件和使用的相关文件放置到vendor当中 二.调用同一支付接口 WechatController //调用同一支付接口public function native($v_oid='',$v_amount=''){ ini_set('date.timezone','Asia/Shanghai'); error_reporting(E_E