专栏首页犀牛饲养员的技术笔记一文读懂H5,APP,WAP,公众号支付等多种支付方式的区别

一文读懂H5,APP,WAP,公众号支付等多种支付方式的区别

从事支付行业开发多年,做过很多不同的场景。发现各种支付方式多样化,还有各种不同的叫法,很多人都是一知半解,容易混淆一些概念。这篇文章希望根据自己的理解,尽量的把几种支付方式说清楚。

线上和线下

首先从大类上,任意一种支付方式必定属于这两类。线上和线下的区别在于商品交易的场景是在实体的店铺还是互联网上(比如电商平台)。

线下支付场景分类

付款码支付

也有叫条码支付的,也有叫被扫(从用户的角度)。其实名字不重要,关键看场景。它的场景是这样的:

商家使用扫码枪等条码识别设备扫描用户APP上的条码(一维码或者二维码),完成收款。用户仅需出示付款码,所有收款操作由商家端完成。支付宝的示例如下图:

image 图片来自网络

具体步骤是:

  1. 用户打开支付APP(支付宝,微信或者云闪付等),找到付款码界面;
  2. 收银员在商家收银系统操作生成订单,用户确认支付金额;
  3. 收银员使用扫码设备(包括扫码枪,POS机等),扫描用户手机上的条码(一维码或者二维码),商家收银系统提交支付。
  4. 机构后台(支付宝,微信支付,银联等)收到支付请求在后台进行交易处理。
  5. 付款成功(或者失败)后商家的收银系统和用户都会有相关的提示。

在第三步,支付机构会提供支付的接口,接口提供的方式有多种,比如有SDK的方式,还有HTTP的方式。请求的报文里携带付款码的信息(是一串数字,不同的支付机构特征不一样)。

这里还是拿支付宝的条码支付举个栗子:

https://openapi.alipay.com/gateway.do?timestamp=2013-01-01 08:08:08&method=alipay.trade.pay&app_id=2284&sign_type=RSA2&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&biz_content=
  {
    "out_trade_no":"20150320010101001",
    "scene":"bar_code,wave_code",
    "auth_code":"28763443825664394",
    "subject":"Iphone6 16G",
    "seller_id":"2088102146225135",
    "total_amount":"88.88",
    "store_id":"NJ_001"
  }

其中auth_code就是付款码的信息。

这种场景和传统的POS收款其实异曲同工,本人早年从事过POS机支付相关的开发工作,POS机线下收款获取的是银行的信息,而条码支付获取的是用户APP上的付款码信息。获取信息之后都是往第三方付支付机构(包括银行,支付宝,微信等)发起支付请求并最终完成整个支付流程。

扫码支付

扫码支付也是一种线下的支付方式。它和付款码的区别扫码的主体互换了。是由用户使用APP扫描商户收银端生成的二维码。支付宝的示例如下图:

具体步骤是:

  1. 商家的收银系统根据用户购买的商品生成订单信息,并根据订单信息并生成二维码;
  2. 用户打开APP的扫一扫界面,扫描第一步的二维码,核对金额然后支付;
  3. 用户付款后商家收银系统会拿到支付成功或者失败的结果。同时用户本身也会收到相应的结果。

扫码支付的场景多见于自动售货机。大家仔细回想下在自动售货机上购买商品的过程就明白了。

线上支付场景

APP支付

场景是商家在APP上集成支付宝或者微信支付的功能。比如我们使用美团外面APP订外卖,付款的时候会弹出微信APP进行支付,这就是APP支付的场景。

示例如下图:

步骤如下:

  1. 用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单数据,然后由商户APP调用支付SDK的接口;
  2. 支付APP这个时候会被调用起来进行输入密码等操作并完成支付;

APP支付一般是提供手机端的封装好的SDK给到商户的APP调用,所以有安卓和IOS两个版本,这是和HTTP接口不同的地方。这里拿支付宝的安卓端SDK举个栗子(这里只展示关键部分的代码):

    public void payV2(View v) {
        ...
        final Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                PayTask alipay = new PayTask(PayDemoActivity.this);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Log.i("msp", result.toString());

                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };

        ...
    }

PayTask就是SDK提供的用于发起支付的核心类,通过调用它的方法payV2发起支付请求。payV2的第一个参数就是封装的订单信息对象。

公众号支付

微信叫公众号支付,支付宝叫生活号支付(也有叫支付宝服务窗支付的)。其实针对的场景是相似的,微信针对的是公众号里面的商家H5页面发起支付的场景,而支付宝针对的是生活号里的商家H5页面发起的支付场景。

这个拿大家熟悉的微信公众号举个栗子,具体的流程如下:

  1. 进入公众号自定义菜单,用户点击进入商户网页选择购买商品;
  2. 调起微信支付控件,用户输入支付密码完成支付;
  3. 商户后台得到支付成功(或者失败)的通知;

这里有几个关键的点说明以下:

  • 支付过程并不会唤起微信APP,而是启动了一个微信支付的控件
  • 支付请求参数中需要携带用户的openid,这个也是由公众号支付的特殊性决定的,在微信内置浏览器中是可以获取到用户的openid的;

H5支付和手机WAP支付

这两个其实是一回事,只是叫法不同。场景都是在普通的浏览器(非支付宝和微信内置浏览器)打开商户的H5页面发起支付,唤起支付APP进行支付的情况。支付完后跳回到商家H5页面内,最后展示支付结果。

据我的了解,这种场景应该是目前使用的最广泛的。比如我小区的电梯里经常看到一些蛋糕的广告,扫描上面的二维码就进入了商家的H5页面,然后选择商品购买即可,非常方便!

小程序支付

微信和支付宝现在都再力推小程序,那怎么能少得了支付的支持呢!

小程序的支付这里不详述了,因为它和公众号支付基本是一样的。就是在配置上有些差异,比如微信小程序支付不需要配置支付目录,授权域名这些了,简化了一些流程。

网关支付

网关支付也是属于线上支付,但它又不同于前面介绍的互联网支付方式。它属于传统的银行网银支付。一般情况下是符合资质的第三方支付机构提供的一种支付服务。

这些机构后台会接入多家银行,然后在前台放出接口给到商家。交易的时候需要在商家的收银系统上选择银行,然后通过第三方支付机构跳转到对应的银行网银完成支付流程。

网关支付一般是在PC端的IE浏览器进行操作,移动端也有些机构提供,但是似乎兼容性一直不太好。场景一般是有大额往来的B2B业务。

本文分享自微信公众号 - 犀牛饲养员的技术笔记(coder_start_up),作者:siwuxie18

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一分钟知识点:maven的版本管理

    以前一个人开发基于maven的项目,都是简单粗暴的方式,哪管什么版本管理,需要什么在POM引入就可以了。后来管理技术团队才体会到maven的版本管理是如此强大,...

    用户7634691
  • maven导入jar包到本地仓库

    很多时候通过maven来远程下载jar包,由于网速或者仓库地址问题导致下载失败或者非常缓慢。还有一种情况是,我们用的一些三方jar包,中央仓库并没有,比如一些开...

    用户7634691
  • 带你认识线程安全的集合操作

    简单来讲,我们平时经常使用的ArrayList不是线程安全的。我们通过使用 Collections.synchronizedList 来包装一个线程安全的Arr...

    用户7634691
  • 移动支付:两马之外还有变数

    补贴打车App、投资线下资源、火烧对方后院,两马战仍然没有降温的意思。不久阿里祭出封杀大招,支付宝直接屏蔽了微信,就像淘宝当初屏蔽微信流量一样,要与微信...

    罗超频道
  • Web前端学习 第11章 微信开发5 微信支付

    如果需要实现微信支付功能,需要有一个已认证的微信服务号,并且开通微信支付,开通后微信会提供一个商户ID。有了这个ID才能成功调用微信支付接口。

    学习猿地
  • 【融职培训】Web前端学习 第11章 微信开发5 微信支付

    如果需要实现微信支付功能,需要有一个已认证的微信服务号,并且开通微信支付,开通后微信会提供一个商户ID。有了这个ID才能成功调用微信支付接口。

    学习猿地
  • 支付系统架构

    大部分公司,只要想赚钱,就得上支付系统,让用户或者客户有地方交钱。 当然,公司发展的不同阶段,对支付系统的定位和架构也不同。整体上来说,我们可以把一个公司的支付...

    牛嗷嗷
  • 关于微信支付开发中的各项配置

    1、商户号 2、32位生成的秘钥(账户中心——API安全——设置API密钥) 3、支付证书 4、JSAPI需要配置支付授权目录(产品中心——开发配置——支...

    华创信息技术
  • 微信开发工具包(服务号+小程序+支付)

    微信支付(账单、卡券、红包、退款、转账、App支付、JSAPI支付、Web支付、扫码支付等)

    程序源代码
  • 真的靠谱吗?如何看待“刷脸支付”的技术现状

    随着生物识别技术在移动支付领域的拓展,如今,已有支付宝“刷脸支付”在位于杭州市的肯德基KPRO餐厅正式商用。这之前,京东线下的京东之家体验店已经开始内测“刷脸支...

    WZEARW

扫码关注云+社区

领取腾讯云代金券