Node.js 实战篇--微信支付系列(一)

花名提莫 2018-02-05 17:24:17 ⋅ 608 阅读

真正的无知不是知识的贫乏, 而是拒绝获取知识!——波普尔 (哲学家 思想家)

鉴于微信支付文档内容详实,容易丧失耐心.特此整理

目录

第一部分 前期储备
  1.1 注册前的概述
  1.2 注册所需材料
第二部分 已获取商户号
  2.1 得到商户号
  2.2 支付类型
     2.2.1. 刷卡支付
     2.2.2. 公众号支付
     2.2.3. 扫码支付
     2.2.4. APP支付
  2.3 商户支付注意规则
     2.3.1 协议规则
     2.3.2 安全规范
     2.3.3 证书相关内容
  2.4 业务流程图

第一部分 前期储备

1.1 注册前的概述

从微信公众平台可以获取到公众号的分类如下:

  1. 服务号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息;【适用人群】:媒体,企业,政府或其他组织

  2. 订阅号: 主要偏于服务交互(类似银行,114,提供服务查询),认证前后都是每个月可群发4条消息;【适用人群】:个人、媒体、企业、政府或其他组织。

  3. 企业号: 主要用于公司内部通讯使用,需要先验证身份才可以关注成功企业号。【适用人群】:企业,政府,事业单位或其他组织

以上三者之间的区别以及相关问题汇总

因为本篇文章侧重于支付环节,从上图中可以得知我们可以选择认证的服务号认证的企业号

1.2 注册所需材料

从腾讯文档中可以得到以下信息:

具体的不同类型的注册,请前往腾讯文档下侧选择具体类型.可进入微信客服--微信支付商户教程

第二部分 已获取商户号

2.1 得到商户号

审核通过后,获取到的信息如下:

2.2 支付类型

微信支付拥有四种基础支付功能,分别为刷卡支付、扫码支付、公众号支付、APP支付,并提供企业红包、代金券、立减优惠等营销新工具,满足用户及商户的不同支付场景。

2.2.1. 刷卡支付

场景介绍: 如超市付款,工作人员扫我们微信支付码.

步骤1:用户选择刷卡支付付款并打开微信,进入“我”->“钱包”->“刷卡”条码界面;
步骤2:收银员在商户系统操作生成支付订单,用户确认支付金额;
步骤3:商户收银员用扫码设备扫描用户的条码/二维码,商户收银系统提交支付;
步骤4:微信支付后台系统收到支付请求,根据验证密码规则判断是否验证用户的支付密码,不需要验证密码的交易直接发起扣款,需要验证密码的交易会弹出密码输入框。支付成功后微信端会弹出成功页面,支付失败会弹出错误提示。

刷卡支付文档

2.2.2. 公众号支付

一图胜多言,下图就是使用场景

以下是支付场景的交互细节,请认真阅读,设计商户页面的逻辑:

(1)用户打开商户网页选购商品,发起支付,在网页通过JavaScript调用getBrandWCPayRequest接口,发起微信支付请求,用户进入支付流程。
(2)用户成功支付点击完成按钮后,商户的前端会收到JavaScript的返回值。商户可直接跳转到支付成功的静态页面进行展示。
(3)商户后台收到来自微信开放平台的支付成功回调通知,标志该笔订单支付成功。

公众号支付文档

2.2.3. 扫码支付

场景介绍: 我们主动扫描商家贴墙上的二维码[一般固定金额]
用户扫描商户展示在各种场景的二维码进行支付。

步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。
步骤2:用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付。

扫码支付文档

2.2.4. APP支付

适用于商户在移动端APP中集成微信支付功能

交互细节如下:

步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以微信提供的DEMO为例。
步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面。
步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付
第四步:输入正确密码后,支付完成,用户端微信出现支付详情页面。
第五步:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。

APP支付文档

2.3 商户支付注意规则

2.3.1 协议规则

商户接入微信支付,调用API必须遵循以下规则

2.3.2 安全规范

安全规范主要在于微信交互过程中需要注意的事项

  1. 签名算法------(签名校验工具)

步骤:

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行` MD5运算` ,再将得到的字符串所有字符转换为`大写`,得到sign值signValue。
key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置

例子:

1. 假设传送的参数如下:
-----------------------
appid:  wxd930ea5d5a258f4f
mch_id: 10000100
device_info:    1000
body:   test
nonce_str:  ibuaiVcKdpRxkhJA
-----------------------

2. 对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
-----------------------
stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";
-----------------------

3. 第二步:拼接API密钥:
-----------------------
stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d"
sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7"
-----------------------

4. 最终结果

=======================<xml><appid>wxd930ea5d5a258f4f</appid><mch_id>10000100</mch_id><device_info>1000<device_info><body>test</body><nonce_str>ibuaiVcKdpRxkhJA</nonce_str><sign>9A0A8659F005D6984697E2CA0A9CF3B7</sign></xml>=======================

注意事项:

◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
2.3.3 证书相关内容

涉及资金回滚时,需要用到证书,比如退款、撤销接口, 证书一共包含四个(pkcs12格式CA证书(rootca.pem)证书pem格式(apiclient_cert.pem)证书密钥pem格式(apiclient_key.pem)) 其中◆ apiclient_cert.p12是商户证书文件,除PHP外的开发均使用此证书文件。

我们关注的主要是apiclient_cert.p12是商户证书文件,路径下载:

微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全-->证书下载 。

2.4 业务流程图

四种支付,四种不同的流程图,所以罗列下来吧

  1. 刷卡支付流程图

  2. 公众号支付流程图

  3. 扫码支付流程图一 || 模式二

  4. APP流程图

更多精彩内容请关注“IT实战联盟”哦~~~




全部评论: 0

    我有话说:

    Node.js 实战--支付系列(二)

    接上首先我们看下整体上小程序的开发流程图

    小程序实战:基于wxcharts.js绘制移动报表

    小程序图表插件(wx-charts)是基于canvas绘制,体积小巧,支持图表类型饼图、线图、柱状图 ......

    小程序实战:商品属性联动选择(案例)

    本期的小程序实战来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点

    小程序电商实战-首页(下)

    小程序电商实战-首页(上)好了,上一期我们把首页搜索、导航栏和广告轮播给做完了,那么接下来会继续

    小程序电商实战-首页(上)

    小程序电商实战-入门 嗨,大家好!经过近两周的精心准备终于开始小程序电商实战之路喽。那么最终会做成什么样呢?好了,不啰嗦了 我们先看首页长什么样吧!   首页效果图

    为什么要使用 Node.js?这几点你必须知道!

    经过这几年的发展,前端普遍进入了技术深水区,只会Web页面开发已经难以满足企业的需求,Node逐渐成为了刚性技能。 但Node在业务上的使用还没有那么普及,有的时候想用老板还不同意,本文将从4个角度

    小程序实战:如何解决https域名问题 ?

    开发自己的小程序绕不开https问题,为了能在小程序中调用我们自己的API服务请打开看看吧!!!

    Node实战:Express路由(三)

    Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供系列强大的特性,帮助你创建各种 Web 和移动设备应用。

    小程序电商实战-入门

    小程序开发工具有新版本更新啦!开发体验更好了,接下来一起为电商小程序做下准备前期准备工作~~

    小程序商城(九):授权并实现个人中心页面页面

    实现商城的授权并获取用户信息和个人中心页面布局

    小程序实战实现抖音评论效果

    我们在写小程序的时候经常会遇到弹出层的效果而现有官网提供的跳转方法多数是不支持参数传递的。本文教大家做一个抖音评论效果的小程序......

    小程序商城():https框架搭建并实现导航功能

    本文将带领大家搭建https的小程序框架,并实现动态获取数据展示效果!

    小程序抖音实战-首页(上)

    你也可以用小程序编写一个抖音

    小程序实现商品数量加减

    这是一个用小程序原生代码实现的数量加减demo,主要是用于商品购物车或者商品详情修改数量使用

    小程序抖音实战-支持播放小视频

    之前的案例只支持图片的播放,经过粉丝的反馈说视频弄不出来,本节内容就教大家怎么做

    小程序-template使用:实现购物车商品数量加减功能

    我们实现了购物车功能,里面有用到template模板功能来实现购物车商品数量加减和价格计算功能......

    小程序电商实战-商品详情(上)

    先看下今天要实现的小程序商品详情页吧!

    小程序商城(七):动态API实现商品分类

    小程序商品分类页面布局并且调用动态API获取数据并加载

    小程序电商实战-商品详情加入购物车(下)

    今天会接着上开始写商品详情页加入购物车的部分,直接看效果......