成功申请公众账号后获得
商户ID
成功申请微信支付功能之后通过官方发出的邮件获得
子商户ID
受理模式下必须要有的一个子商户ID
HTTP证书在服务器中的路径,用来加载证书用
在成功启用微信支付服务后,用户将收到官方发送的电子邮件,其中包含了“证书”。该证书对应的服务器配置项指的是“HTTP证书”的存放路径(例如,在示例中所需的证书文件位于“docs//”文件夹内的“.cert”文件)。
HTTP证书的密码,默认等于
成功申请微信支付功能之后通过官方发出的邮件获得
这些配置项主要用于在初始化SDK时进行设置。具体的初始化步骤可以参考上文所述内容。
Demo需要商户自己实现的
观察上图可知,桥接器主要负责生成在调用API时必须提交的各类参数,这些生成接口与商户的独立系统紧密相连。商户需依据自身业务系统的具体状况,依照API文档所规定的格式,生成相应的参数,以便在调用API时使用。
在这个例子中,设定了一个至关重要的接口,名为(),其主要功能是为调用API提供一份有效的“授权码”。
/** 获取授权码,该码由扫码终端设备从用户手机中读取,系用户支付时绑定银行卡的标识,其有效期限为短短一分钟。 * @return 授权码 */ public String getAuthCode(){
这仅是初步的,用于手动输入授权码以测试API是否能够正常返回数据的操作。然而,在商户自行开发此接口时,必须结合自身系统进行定制化设计。比如,需要设置监听,以便捕捉到具备一维码或二维码扫描功能的外设,如“扫码枪”。一旦成功扫描到授权码,应将其记录,并激活提交支付的API调用。在调用过程中,应让桥接器中的特定接口获取刚扫描到的授权码,并将其作为参数传递给支付API。
被扫支付业务流程最佳实践
在整个被扫支付流程中,我们需要处理诸如“查询”与“撤销”等操作请求,为此,特此提供了一套建议的执行流程供大家参考,SDK的设计正是基于这一流程进行构建的。
从上图可见主要流程分为四种情况:
扣款即时完成:明确显示扣款操作已成功;扣款明确失败:需执行撤销程序,并反馈失败情况(建议提供详细失败原因,指导用户采取后续措施);密码输入要求:启动订单查询流程,若长时间查询无果,视作失败,随即进行撤销操作;扣款结果未知:首先进行订单查询,若经过一段时间仍未得到成功反馈,即视为失败,并直接执行撤销流程。
两个关键流程解释:
查询次数与间隔设定后,系统将按照用户定义的“查询次数”及“查询间隔”执行轮询操作。若查询次数用尽且未检测到“支付成功”状态,系统将自动启动“撤销流程”。在撤销流程中,系统依据预设的“查询间隔”持续调用撤销API。该API通过特定字段通知商户是否需要继续轮询。若字段值为“=Y”或显示“撤销结果成功”,则表明无需继续轮询,系统最终进入“支付失败”状态。
(以上最佳实践已经在SDK的里面封装好了)
支付业务逻辑分支处理最佳实践
里面的接口定义了支付流程中可能走到的8个分支,分别是:
定义一个名为ResultListener的公共接口,其中包含处理结果的监听器功能。 API反馈的ReturnCode存在异常,表明支付请求处理过程中出现了逻辑错误,建议您逐一检查所传递的参数是否合规,同时确认API是否能够正常接入。 当扫描支付响应数据因返回码错误而失败时,应调用此方法处理,参数为scanPayResData。 API反馈的ReturnCode显示为FAIL,表明支付API系统处理失败,此时需检查提交给API的数据是否符合规范和合法性要求。 当扫描支付结果数据通过返回码标识失败时,需执行相应的处理函数,该函数的参数为ScanPayResData类型的scanPayResData对象。 支付请求API反馈的数据签名验证未能通过,这表明数据可能遭到了篡改。 当签名验证失败时,应调用此方法处理,并传入扫描支付响应数据对象。
Demo里面用到的就是实现了以上这8个接口。
这里有几点处理建议:
ror、il以及这三种问题均涉及程序逻辑,建议商家自行进行日志跟踪,一旦发现异常应迅速指派工程师进行故障排查;而re、lid、gh这类问题则与用户自身相关,商家应向用户展示详细的错误信息,并指导用户如何进行后续操作。具体错误信息可从点括号中获取。为了实现商户系统接入SDK的最佳操作,应创建一个新的订单,输入订单金额,激活扫码枪功能,让用户进行扫码。扫码器将获取授权码,并将其反馈以提交支付请求。
SDK处理API返回的数据
为确保整体系统的安全,商户系统部署需遵循最佳实践,因此支付请求应由商户后台系统主动发起;而商户系统与SDK的对接,关键在于实现其内部的接口功能。
在本demo中,我们提供了单元测试用例,商户开发者可以参照此示例进行参考。
高级自定义:1)自定义查询流程和撤销流程
商家可依据自身具体需求,自行调整“查询流程”中的“查询次数”与“查询间隔”;同样,“撤销流程”的“查询间隔”也可进行相应配置;比如:
//自定义调用查询接口的间隔 scanPayBusiness调用了设置等待时间的方法,该时间设为3000毫秒,以便在支付查询服务被调用之前。
高级自定义:2)使用自己的请求器
某些商家或许已在自系统中部署了高度封装的请求器,若他们希望SDK的服务请求均通过这些请求器统一发起,本处提供了一项配置选项,用以实现此功能。
//自定义底层的HttpsRequest 配置对象设定了HTTPS请求的类名为“com.tencent.httpsrequest.HttpsRequestForTest”。
请注意:自行开发的请求器务必实现该接口,并可以参考SDK中提供的实现方式。
调用被扫支付API的协议规则
序号||
:-:|-|-
1|传输方式|为保证交易安全性,采用传输
2|提交方式|采用POST方法提交
数据提交与输出均须采用XML格式,其中根元素的名称为“xml”。
4|字符编码|统一采用UTF-8字符编码
5|签名算法|MD5
在数据请求与接收过程中,必须对签名进行验证,这一验证过程在SDK中已预先进行了封装处理。
7|证书要求|调用申请退款、撤销订单接口需要商户证书
在进行判断时,首要步骤是核对协议字段所提供的信息,紧接着评估业务层面的反馈,最终确认交易的具体状态。
进行支付时,若交易金额超过300元,必须通过验证支付密码;每个用户账户在一天内最多可享受10次免密支付,一旦超过此限额,便需输入支付密码;若微信支付系统检测到用户的支付行为存在异常,即便交易符合免密条件,同样会要求用户进行密码验证。相关信息可参考相关资料。