Native支付介绍和使用操作流程
一、Native支付是什么
Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。
应用场景
Native支付适用于PC网站、实体店单品或订单、媒体广告支付等场景
用户扫描商户展示在各种场景的二维码进行支付,具体操作流程如下:
第一步: 商户根据微信支付的规则,为不同商品生成不同的二维码(如图),展示在各种场景,用于用户扫描购买。
第二步:用户使用微信“扫一扫”(如图)扫描二维码后,获取商品支付信息,引导用户完成支付(如图)。
第三步:用户确认支付,输入支付密码(如图)。
第三步:用户确认支付,输入支付密码(如图)。
第四步:支付完成后会提示用户支付成功(如图),商户后台得到支付成功的通知,然后进行发货处理。
以上关于Native支付流程,如有不明白之处可以咨询我们。
二、Native支付接入前准备
1.选择接入模式
商户/服务商在接入前首先要判断自己公司注册区域适用的接入模式,微信支付目前提供两种接入方式:直连模式和服务商模式。
直连模式:信息、资金流:微信支付—>直连商户
直连模式,商户自行申请入驻微信支付,无需服务商协助。(商户平台申请)成为直连商户。直连模式相关说明详见:直连模式介绍。
● 服务商模式:
服务商模式,商户申请成为微信支付服务商,服务商自身无法作为一个直连商户直接发起交易,其发起交易必须传入相关特约商户商户号的参数信息。(服务商平台申请)成为服务商。请结合自身实际情况来选择接入模式。
2.参数申请
1申请APPID
由于微信支付的产品体系全部搭载于微信的社交体系之上,所以直连商户或服务商接入微信支付之前,都需要有一个微信社交载体,该载体对应的ID即为APPID。
目前服务商的社交载体只能是公众号,服务商可通过公众平台完成公众号注册申请。
公众号申请成功后,服务商可登录公众号平台即可获取对应的APPID,具体查阅目录为 【开发-> 基本配置-> 公众号开发信息】,如下图所示。通常情况下,一个服务商只需申请一个公众号即可。
申请mchid
服务商的收款账号即是mchid,申请mchid和APPID的操作互不影响,可以并行操作,申请地址如下: 商户号申请指引。
mchid申请成功后,微信支付将下发通知邮件至机构填写的联系邮箱,内容包含申请成功的mchid及其登录账号密码,请妥善保存。
注意:一个mchid只能对应一个结算币种,若需要使用多个币种收款,需要申请对应数量的mchid。
3绑定APPID及mchid
APPID和mchid全部申请完毕后,需要建立两者之间的绑定关系。
服务商可登录服务商平台,【产品中心-> AppID管理】目录下即可完成绑定。
服务商模式下,一个APPID下可绑定多个mchid,一个mchid可绑定3个APPID。
入驻子商户
上述步骤操作完成后,即会向服务商开放入驻子商户权限。
服务商可登录服务商平台进入【服务商功能】界面完成子商户入驻。
完成
3.配置API key
API v3密钥主要用于平台证书解密、回调信息解密,具体使用方式可参见接口规则文档中证书和回调报文解密章节。
请根据以下步骤配置API key:
登录微信服务商平台,进入【账户中心 > API安全】目录,置APIV3密钥。
在弹出窗口中点击【已沟通】。
输入API密钥,内容为位字符,包括数字及大小写字母。点击获取短信验证码。
输入短信验证码,点击【确认】即设置成功。
完成
4.下载并配置商户证书
商户API证书具体使用说明可参见接口规则文档中私钥和证书章节
服务商可登录微信服务商平台,在【账户中心 -> API安全】目录下载证书
以下为具体下载步骤:
从年底开始,微信支付新入驻机构及商户都将使用CA签发证书,在证书申请页面上点击“申请证书”。
在弹出窗口中点击“确定”。
在弹出窗口内点击“下载证书工具”按钮下载证书工具。
安装证书工具并打开,选择证书需要存储的路径后点击“申请证书”。
在证书工具中,将复制的商户信息粘贴并点击“下一步”。
获取请求串
生成证书串
第一步:在【商户平台】-“复制证书串”环节,点击“复制证书串”按钮后;
第二步:在【证书工具】-“复制请求串”环节,点击“下一步”按钮进入“粘贴证书串”环节;
第三步: 在【证书工具】-“粘贴证书串”环节,点击“粘贴”按钮后;
第四步:击“下一步”按钮,进入【证书工具】-“生成证书”环节。
在【证书工具】-“生成证书”环节,已完成申请证书流程,点击“查看证书文件夹”,查看已生成的证书文件。
完成
5. Native支付设计指引
线上扫码收银台界面规范
示例1:单独显要区域,常驻微信支付
示例2:单独页签+页签首位+新logo+推荐标签+直接二维码
开通流程:服务商在 微信支付服务商平台-品中心-户授权产品中发起申请,获得商户授权后,可以替商户发起服务商Native支付。
三、Native支付开发指引
1. 接口规则
为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,我们推出了全新的微信支付APIv3接口。该版本API的具体规则请参考“APIv3接口规则”。
2. 开发准备
. 搭建和配置开发环境
为了帮助开发者调用开放接口,我们提供了JAVA、PHP、GO三种语言版本的开发库,封装了签名生成、签名验证、敏感信息加/解密、媒体文件上传等基础功能(更多语言版本的开发库将在近期陆续提供)。
测试步骤:
1、根据自身开发语言,选择对应的开发库并构建项目,具体配置请参考下面链接的详细说明:
o wechatpay-java(推荐)wechatpay-apache-httpclient,适用于Java开发者。
o wechatpay-php(推荐)、wechatpay-guzzle-middleware,适用于PHP开发者
注:当前开发指引接口PHP示例代码采用wechatpay-guzzle-middleware版本
o wechatpay-go,适用于Go开发者
更多资源可前往微信支付开发者社区搜索查看
2、创建加载商户私钥、加载平台证书、初始化httpClient的通用方法。
3、基于接口的示例代码,替换请求参数后可发起测试
说明:
o 上面的开发库为微信支付官方开发库,其它没有审核或者控制下的第三方工具和库,微信支付不保证它们的安全性和可靠性
通过包管理工具引入SDK后,可根据下面每个接口的示例代码替换相关参数后进行快速测试
o 开发者如果想详细了解签名生成、签名验证、敏感信息加/解密、媒体文件上传等常用方法的具体代码实现,可阅读下面的详细说明:
1.签名生成
2.签名验证
3.敏感信息加解密
4.merchantPrivateKey(私钥)
5.wechatpayCertificates(平台证书)
6.APIV3Key(V3 key)
3. 快速接入
. 业务流程图
重点步骤说明:
第一步:用户确认支付后,商户调用微信支付Native下单API生成预支付交易以获取支付二维码链接code_url;
商户调用NativeNative下单API后,分正常返回和异常返回情况:
正常返回:返回code_url,商户可根据返回的code_url来生成调用OpenSDK的签名以执行下一步。
异常返回:返回http code或错误码,商户可根据http code列表 或错误码说明来排查原因并执行下一步操作。
第二步:商户根据返回的code_url生成二维码供用户扫描,有关二维码的规则请参考部分的说明。
第三步:用户支付成功后,商户可通过以下两种方式获取订单状态。
方法一:支付结果通知。用户支付成功后,微信支付会将支付成功的结果以回调通知的形式同步给商户,商户的回调地址需要在调用Native下单API时传入notify_url参数。
方法二:当因网络抖动或本身notify_url存在问题等原因,导致无法接收到回调通知时,商户也可主动调用查询订单API来获取订单状态。
. API接入(含示例代码)
本章节展示了如何使用微信支付服务端 SDK 快速接入Native支付产品,完成与微信支付对接的部分。
注意:
文档中的代码示例是用来阐述 API 基本使用方法,代码中的示例参数需替换成商户自己账号及参数才能调试成功。
以下接入步骤仅提供参考,请商户结合实际业务需求进行评估、修改。
. 【服务端】Native下单
步骤说明:用户在商户PC网站内完成商品选择后进入支付页面,商户需要通过后端请求该Native下单API来获取支付二维码链接code_url。
示例代码
重要参数说明:
o out_trade_no:商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
o description:商品描述
o notify_url:支付回调通知URL,该地址必须为直接可访问的URL,不允许携带查询串
o total:订单总金额,单位为分
更多参数、响应详情及错误码请参见Native下单API接口文档
. 【客户端】生成支付二维码
步骤说明:通过Native下单API成功获取支付二维码链接(code_url)后,需要在前端(PC网页或POS机具)生成二维码供用户扫描支付。
注意
code_url对应链接格式:weixin://weixin://pay.weixin.qq.com/bizpayurl/up?pr=NwY5Mz9&groupid=。请商户调用第三方库将code_url生成二维码图片。该模式链接较短,生成的二维码打印到结账小票上的识别率较高。
例如,weixin://weixin://pay.weixin.qq.com/bizpayurl/up?pr=NwY5Mz9&groupid= 生成二维码见下图
.【服务端】接收支付结果通知
步骤说明:当用户完成支付,微信会把相关支付结果将通过异步回调的方式通知商户,商户需要接收处理,并按文档规范返回应答
注意:
支付结果通知是以POST 方法访问商户设置的通知url,通知的数据以JSON 格式通过请求主体(BODY)传输。通知的数据包括了加密的支付结果详情。
加密不能保证通知请求来自微信。微信会对发送给商户的通知进行签名,并将签名值放在通知的HTTP头Wechatpay-Signature。商户应当验证签名,以确认请求来自微信,而不是其他的第三方。签名验证的算法请参考 《微信支付API v3签名验证》。
支付通知http应答码为或才会当作正常接收,当回调处理异常时,应答的HTTP状态码应为,或者4xx
商户成功接收到回调通知后应返回成功的http应答码为或
同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱
对后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。(通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m)。
更多参数、响应详情及错误码请参见 JSAPI / APP / H5 / Native / 小程序支付通知API接口文档
. 【服务端】查询订单
步骤说明:当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知时,商户可通过查询订单接口核实订单支付状态
示例代码(通过微信订单号查询):
注意:
查询订单可通过微信支付订单号或商户订单号两种方式查询,两种查询方式返回结果相同
更多参数、响应详情及错误码请参见 JSAPI / APP / H5 / Native / 小程序查询订单API接口文档
. 【服务端】关闭订单
步骤说明:当商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口
示例代码:
注意:
关单没有时间限制,建议在订单生成后间隔几分钟(最短5分钟)再调用关单接口,避免出现订单状态同步不及时导致关单失败。
已支付成功的订单不能关闭
更多参数、响应详情及错误码请参见 JSAPI / APP / H5 / Native / 小程序接口文档
. 【服务端】申请交易账单
步骤说明:微信支付按天提供交易账单文件,商户可以通过该接口获取账单文件的下载地址
示例代码:
注意:
更多参数、响应详情及错误码请参见 JSAPI / APP / H5 / Native / 小程序接口文档
. 【服务端】下载账单
步骤说明:通过申请交易账单接口获取到账单下载地址(download_url)后,再通过该接口获取到对应的账单文件,文件内包含交易相关的金额、时间、营销等信息,供商户核对订单、退款、银行到账等情况。
示例代码:
注意:
o 账单文件的下载地址的有效时间为30s
o 强烈建议商户将实际账单文件的哈希值和之前从接口获取到的哈希值进行比对,以确认数据的完整性
更多参数、响应详情及错误码请参见 JSAPI / APP / H5 / Native / 小程序下载账单API接口文档
4. 常见问题
Q:微信native支付生成的二维码有有效期吗?
一个二维码的有效期是根据Native下单接口返回的code_url决定,code_url的有效期是2小时。
Q:native支付扫码后提示:支付失败,该商户暂不支持通过长按识别二维码完成支付
A:微信支付已经不支持通过长按识别二维码的方式或通过相册识别二维码的方式完成支付。
Native支付API列表
以上就内容就是Native支付介绍和使用操作流程,如有不明白之处可以咨询我们。