分享

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

 昵称11935121 2018-02-05

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

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

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

目录

第一部分 前期储备

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 注册前的概述

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

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

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

1.2 注册所需材料

从企鹅文档中可以得到以下信息:

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

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

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

第二部分 已获取商户号

2.1 得到商户号

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

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

2.2 支付类型

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

2.2.1. 刷卡支付

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

步骤1:用户选择刷卡支付付款并打开微信,进入“我”->“钱包”->“刷卡”条码界面;

步骤2:收银员在商户系统操作生成支付订单,用户确认支付金额;

步骤3:商户收银员用扫码设备扫描用户的条码/二维码,商户收银系统提交支付;

步骤4:微信支付后台系统收到支付请求,根据验证密码规则判断是否验证用户的支付密码,不需要验证密码的交易直接发起扣款,需要验证密码的交易会弹出密码输入框。支付成功后微信端会弹出成功页面,支付失败会弹出错误提示。

刷卡支付文档

2.2.2. GZH支付

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

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

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

(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必须遵循以下规则

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

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. 最终结果

=======================wxd930ea5d5a258f4f100001001000testibuaiVcKdpRxkhJA9A0A8659F005D6984697E2CA0A9CF3B7=======================

注意事项:

◆ 参数名ASCII码从小到大排序(字典序);

◆ 如果参数的值为空不参与签名;

◆ 参数名区分大小写;

◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

2.3.3 证书相关内容

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多