网站首页 > 资源文章 正文
前言
介绍下最近一段时间内在公司做的一个微信小程序小项目几个核心功能的设计流程和部门代码实现
- 微信小程序登陆
- 获取手机号
- 微信OCR识别
- 微信人脸识别
- 微信支付
备注:本文章没有和公司相关的私密信息;每个功能都是通用的插件
微信小程序登陆
通过code获取secretKey和openId的接口封装
# 这个appId是指小程序id 在微信公众平台申请小程序的时候会生成
WxMaService wxMaService=WxMaConfiguration.getMaService(appId);
# 这里是设置失败重试次数 每一次失败重试时间间隔会变成 比如第一次3秒 第二次隔6秒重试一次 第三次隔9秒重复一次 所以对于用户来说不希望等待太久 所以设置为失败重试次数为0 即失败了 直接返回错误 不重试
wxMaService.setMaxRetryTimes(0);
WxMaJscode2SessionResult session =wxService.getUserService().getSessionInfo(code);
关键代码
https://gitee.com/pingfanrenbiji/resource/tree/master/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E5%BE%AE%E4%BF%A1%E7%99%BB%E9%99%86/%E5%85%B3%E9%94%AE%E4%BB%A3%E7%A0%81
demo源码
https://gitee.com/pingfanrenbiji/weixin-java-miniapp-demo
依赖pom
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>${weixin-java-miniapp.version}</version>
</dependency>
<properties>
<weixin-java-miniapp.version>4.0.2-SNAPSHOT</weixin-java-miniapp.version>
</properties>
配置
wx:
miniapp:
configs:
- appid: xxxx #微信小程序的appid 必填
secret: xxxx #微信小程序的Secret 必填
token: #微信小程序消息服务器配置的token 非必填
aesKey: #微信小程序消息服务器配置的EncodingAESKey 非必填
msgDataFormat: JSON
依赖包weixin-java-miniapp源码
https://gitee.com/pingfanrenbiji/WxJava/tree/master/weixin-java-miniapp
获取手机号
手机号解密关键代码
WxMaPhoneNumberInfo phoneNoInfo = wxService.getUserService().getPhoneNoInfo(sessionKey,encryptedData, iv);
本地解密函数
微信OCR识别
微信ocr识别关键代码
WxOcrIdCardResult result = wxService.getOcrService().idCard(fileUrl);
fileUrl 身份证正反照片url
备注:不建议使用该接口
1、该接口仅仅是图片ocr识别而已 并不能验证身份证信息是否正确
2、拍身份证照片的时候 若仅仅只拍姓名 也返回正确 只是返回信息中只有姓名
微信人脸识别
备注
该接口微信未公开即在技术平台查不到相关接口
需要开通该接口的话
需要给微信发送邮件申请
微信针对企业资质进行审核
若审核通过之后会发给对接文档
我们在申请的时候 是以公证处的名义申请的
获取secretKeyId关键代码
WxFaceResult wxFaceResult=wxService.getWxFaceService().getSecretKeyId(name,idcard);
传入姓名、身份证号
获取人脸识别结果关键代码
WxFaceResult wxFaceResult = wxService.getWxFaceService
().getFaceResultByVerifyResult(verifyResult);
人脸识别小程序demo
该微信小程序人脸识别demo是微信内部人员通过邮件发送给我的
https://gitee.com/pingfanrenbiji/resource/tree/master/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB/calorieTestDemo
取证+微信支付
对应关系说明
1、用户拍照(无论是视屏还是照片)一次即是一个证据文件
2、一个取证订单对应多个证据文件 最多可以有9个
3、一个取证订单对应一笔支付成功的记录
金额相关说明
1、假如一个证据文件1元 9个证据文件是9元
2、用户首单减免 减免金额和订单金额一致
关键逻辑说明
1、用户可以生成多个取证订单
2、那么这些订单全是待支付的订单
3、用户从这些订单中选择某一个订单进行支付 那么这个订单是首单 它有减免金额
所以至于哪个是首单 在用户下取证订单的时候并不确定
而是用户选择哪个订单进行支付的时候才能确定
所以有一个支付订单金额详情页面 此时会判断当前订单是否是当前用户的额首单 若是首单则会有减免金额
异常情况思考
用户唤起了微信支付收银台并没有发起支付的场景
思考当前流程是否有漏洞:
用户操作过程:
1、用户选择某一个订单进行支付
2、展示该订单的支付金额的情况
包含减免金额、实际支付金额
3、用户点击支付按钮
4、小程序获取微信支付参数
5、小程序拿到微信支付参数之后 唤起微信支付收银台
6、用户关闭收银台
7、在此重复3-5过程 或者 2-5过程
分析:
第2步 每次支付金额详情展示页面上的实际金额都是根据当前这笔订单是否是当前用户首单 若是首单则会有减免金额 实际金额是=原金额-减免金额
所以这一步每次获取的金额都是对的
第4步 每次获取微信支付信息 传入的参数是订单编号
后台逻辑:
a 通过订单编号查询当前订单支付中的订单记录信息
得到支付记录信息之后 其中的支付金额是原金额(实际金额=原金额-减免金额)
b 获取该订单最新支付金额 该金额和用户在订单支付详情页面看到的金额是一致的
c 若有减免金额 即实际支付金额是0 那么更新支付状态为成功、支付金额是0即可
d 若没有减免金额 即实际支付金额不为0 则发起微信支付参数获取
所以用户多次对同一个订单唤起多起微信收银台都是没有关系的
因为对于同一个订单只有一笔待支付的支付记录
多次唤起对应同一个订单、同一个待支付记录 所以该用户操作异常的场景是不会产生问题的
猜你喜欢
- 2024-09-21 基于JavaEE——微信网页(一)角色的基本说明
- 2024-09-21 移动开发:SpringBoot整合微信小程序登录
- 2024-09-21 java使用API在微信开发者平台接入一个机器人回复
- 2024-09-21 微信公众平台开发java版之公众平台注册,设置,登录(第一课)
- 2024-09-21 Java基于微信公众号接口实现授权登录源码及原理分析
- 2024-09-21 基于微信小程序的游戏论坛设计与实现-计算机毕业设计源码+LW文档
- 2024-09-21 用Java搭建微信公众号生成access_token
- 2024-09-21 Jeewx-api 1.4.9 版本发布—第三方APP开发SDK,支持微信、钉钉等
- 2024-09-21 SpringBoot实战之—与微信小程序的通信(附源码)
- 2024-09-21 Joolun微信小程序源码功能一览表(Java)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)