【项目】
https://kerryprops.atlassian.net/browse/KIP-5945 https://kerryprops.atlassian.net/browse/KIP-5946
逻辑部分:获取用户的一些信息 groupId、kipUserId、mallId、(小程序端生成uuid)
在getZindexForHomePage接口中,设置 临时停车的h5地址并且修改 linkType(管理端配置)
接收h5端拼接的微信支付信息,发起微信支付,将结果通过websocket返回给h5端
说明:2端中间的通信数据,必须为 Object对象。通信时会统一加密通信数据,解密之后的数据格式如下;
数据类型说明:
{
type: string 事件类型
options: any{} 通信时携带的数据,为 Object 类型
}
1、h5端打开微信小程序页面
type:'openWxPage'
options: {
url: string 必须是完整地址
data: any{} 传输的数据
}
2、微信小程序打开h5端页面
type:'openHtmlPage'
options: {
url: string 必须是完整地址
data: any{} 传输的数据
}
3、h5端发起微信支付
type:'openWxPay'
options: {
//... 发起支付时所需的数据
}
4、微信支付操作结束通知h5端(包含未支付和支付成功)
type:'wxPayDone'
options: {
//...支付结束之后的回调数据
}
import CryptoJS from 'crypto-js'
const key = CryptoJS.enc.Utf8.parse("2B3C13E421D12ACF"); //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ACE23C13D4B21F12'); //十六位十六进制数作为密钥偏移量
//加密方法
export function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
//解密方法
export function Decrypt(word) {
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
https://uniapp.dcloud.net.cn/api/request/websocket.html#connectsocket
http://zhenhua-lee.github.io/node/socket.html
https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html
![[临时停车H5流程图.svg]]
说明: 1、用户(进|出)停车场扫码 2、小程序端判断为临时停车,向后端发起请求,获取临时停车的(h5地址+token|token) 3、进入小程序端的webview 4、用户离开停车场时,在H5端发起微信支付。通过websocket通知小程序端吊起微信支付,获取在h5端发起微信支付。支付完成之后,用户离开停车场。