在所有公众号服务中,线上支付成为企业公众号运营的关键环节,如何在微信公众号内安全、科学、高效地使用支付技术,成为企业的关注热点,本文探讨基于JSAPI微信公众号支付的设计和实现。
1、场景与需求
1.应用场景
JSAPI支付是用户在微信中打开商户的H5页面,或在微信公众号内进入商家公众号,打开某个消费Web页面,点击相应的商品或服务的时候,商户在H5页面通过调用微信支付提供的JSAPI接口,调起微信支付模块完成商品或服务的在线支付。此种支付方式使用方式灵活,快捷,在公众号内应用广泛。本文以一个特种作业在线考培平台的资源支付为例,阐述JS-API在线支付设计与实现。
2.功能需求
文中的案例特种作业在线考培平台主要采用三层架构的框架体系,采用C#.net语言开发,采用SQL server作为后台数据库,平台具有手机端和PC端使用界面,其中手机端界面嵌入到企业微信公众号内使用,平台主要提供特种作业人员在线学习、模拟的功能,特种作业主要分为建筑施工特种作业、特种设备作业两大类,其中建筑施工特种作业类每个工种的在线学习资源、特种设备作业类每个工种的在线学习资源的学习价格可以在后台自定义。
2、设计与实现
1.数据库设计
出于安全及系统交易记录的可追溯性,在数据中创建一个名为ht_orders的表用于存储线上交易数据,在交易出现问题时,有追溯的依据。表ht_orders的数据字典见表1。
表1 后台数据库中存储交易记录的表结构
2.支付业务逻辑
以在线考培平台建筑施工特种作业的施工升降机操作工为例进行说明,学员关注平台公众号,进入学习注册页面,完善学员的个人信息,个人信息包括学员身份证号码、手机号码,通过Drop Down List下拉列表框选择自己学习的工种(如:建筑施工升降机操作工等),点击注册按钮,学员填写的身份证号、手机号采用正则表达式的方式进行验证,验证通过后,弹出支付界面,学员进行支付,否则,将返回学员信息填写页面。根据支付结果的返回值进行判断,如果支付成功,将学员的个人信息写入数据库,学员可以用其个人的身份证号码登录进行在线资源的使用,同时将交易记录的相关数据写入表ht_orders中。否则,将返回支付失败页面。具体流程参见图1。
图1 支付业务流程
3.支付程序实现
支付过程中,用户点击前台注册按钮唤醒支付程序,采用Jquery技术将注册数据(如:用户名、身份证号、注册工种、价格、数量)传到支付预处理程序模块,预处理后,进行支付,支付后调用Order类的生成订单方法,订单生成成功则返回True,根据订单生成方法的返回值,判断是否将用户注册信息写入数据库,如果订单生成方法的返回值为True,则将用户信息写入数据库;如果订单生成方法的返回值为False,用户信息不会被写入到数据库,程序将发生回滚操作。具体流程参见图2。
(1)前台注册代码
前台注册按钮被点击时触发onclick事件,调用前台register()方法,register()方法中包含对学员所填的身份证号码、手机号码等信息采用正则表达式进行合规性验证,合规性验证通过后,采用Ajax技术与后台数据库现有的用户信息进行查重比对,如果存在重复用户记录(以身份证号+工种名称作为联合查询条件),则提示已经存在用户信息,需要重新填写用户记录。用户填写的注册信息验证通过后,调用pay Ment()方法,进行费用支付。
前台注册按钮click事件的HTML代码:
图2 支付程序实现流程
(2)前台预支付程序代码
将合规性验证后的用户身份证号、手机号、购买服务名称、价格、数量等参数传递到后台处理程序,前台预支付方法payMent()负责向后台提交相关支付数据和用户的注册信息。
(3)后台支付程序代码
根据前台传入的参数,生成用户订单。
(4)用户信息写入程序
用户支付后,系统根据订单号查询用户支付情况,如果数据库中存在订单订单信息,程序会将用户信息写入数据库,用户可以用注册的账号信息登录,进行在线资源学习。
3、结束语
文中基于JSAPI的实现微信公众号内的在线支付程序逻辑业务分析准确、程序执行流程科学,支付与处理程序、支付订单生成程序、交易成功后的数据写入程序、交易失败后的回滚处理机制有机衔接,交易记录本地化存储。程序性能稳定、安全性高,在多家企业公众号的商品交易、在线资源服务等方面进行在线支付试用与应用,均得到较好的反馈。