let 获取的ACCESS_TOKEN = ""; let 储存_appid_ = ""; let 储存_secret_ = ""; let 储存_商户号_ = ""; let 储存_APIv2密钥_ = ""; let wxApiClass = { InitializeWeChatPayment(商户号_, APIv2密_) { 储存_商户号_ = 商户号_; 储存_APIv2密钥_ = APIv2密_; }, InitializeWeChatOfficialAccount(appid_, secret_) { 储存_appid_ = appid_; 储存_secret_ = secret_; 获取的ACCESS_TOKEN = FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid_ + "&secret=" + secret_, false)["access_token"]; window.setInterval(() => { 获取的ACCESS_TOKEN = FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid_ + "&secret=" + secret_, false)["access_token"]; }, 60000); }, WhetherOfficialAccountTokenIsVerified(访问信息) { if (访问信息["链接地址"].indexOf("signature=") != -1 && 访问信息["链接地址"].indexOf("&echostr=") != -1) { return true; } else { return false; } }, SendingTokenVerificationSuccessMessage(访问信息) { 访问信息["主动发送"]({ "发送数据": 访问信息["参数信息"]["echostr"], "数据协议": electronHttpServerAPI.getTypeMime("html") }); }, GenerateTemporaryQRCodeLink(二维码失效时间 = 300, 二维码内容 = "123456") { let 请求参数 = { "expire_seconds": 二维码失效时间, "action_name": "QR_STR_SCENE", "action_info": { "scene": { "scene_str": 二维码内容 } } }; let 获取TICKET = FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(请求参数)); return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + 获取TICKET["ticket"]; }, GeneratePermanentQRCodeLink(二维码内容 = "123456") { let 请求参数 = { "action_name": "QR_LIMIT_SCENE", "action_info": { "scene": { "scene_id": 二维码内容 } } }; let 获取TICKET = FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(请求参数)); return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + 获取TICKET["ticket"]; }, PullOfficialAccountInformation(访问信息) { let 公众号消息 = { "状态": "非公众号消息" }; if (访问信息["链接地址"].indexOf("?signature=") != -1 && 访问信息["链接地址"].indexOf("×tamp=") != -1 && 访问信息["链接地址"].indexOf("&openid=") != -1) { if (访问信息["参数信息"]["nonce"]) { if (访问信息["参数信息"]["openid"]) { 公众号消息["状态"] = "公众号消息"; 源文本 = electronDecoderAPI.TextDecoder("utf8", 访问信息["整体POST数据"], true); 公众号消息["OpenID"] = 取文本中间_(源文本, "<"); 公众号消息["nonce"] = 访问信息["参数信息"]["nonce"]; 公众号消息["signature"] = 访问信息["参数信息"]["signature"]; 公众号消息["开发者号码"] = 取文本中间_(源文本, "<"); 公众号消息["时间戳"] = 取文本中间_(源文本, "", "<"); 公众号消息["消息类型"] = 取文本中间_(源文本, "<"); 公众号消息["消息内容"] = 取文本中间_(源文本, "<"); 公众号消息["二维码内容"] = 取文本中间_(源文本, "<"); 公众号消息["消息id"] = 取文本中间_(源文本, "", "<"); 公众号消息["Event"] = ""; 公众号消息["是否扫码"] = false; 公众号消息["地理位置纬度"] = ""; 公众号消息["地理位置经度"] = ""; 公众号消息["地理位置精度"] = ""; 公众号消息["源文本"] = 源文本; 公众号消息["Event"] = 取文本中间_(源文本, "<"); if (公众号消息["Event"].toLowerCase() == "scan" || 公众号消息["二维码内容"].indexOf("qrscene_") != -1) { 公众号消息["二维码内容"] = 公众号消息["二维码内容"].replaceAll("qrscene_", ""); 公众号消息["是否扫码"] = true; 公众号消息["消息类型"] = "扫描二维码"; } else { 公众号消息["二维码内容"] = ""; } if (公众号消息["消息类型"] == "event" && 源文本.indexOf("CDATA[unsubscribe]") != -1) { 公众号消息["消息类型"] = 公众号消息["消息类型"] + "[取消关注]"; } if (公众号消息["消息类型"] == "event" && 源文本.indexOf("CDATA[subscribe]") != -1) { 公众号消息["消息类型"] = 公众号消息["消息类型"] + "[关注公众号]"; } if (源文本.indexOf("CDATA[location]") != -1) { 公众号消息["地理位置纬度"] = 取文本中间_(源文本, "", "<"); 公众号消息["地理位置经度"] = 取文本中间_(源文本, "", "<"); 公众号消息["地理位置精度"] = 取文本中间_(源文本, "", "<"); } } } } return 公众号消息; }, DoNotReplyToThisOfficialAccountMessage(访问信息) { 访问信息["主动发送"]({ "发送数据": "success", "数据协议": electronHttpServerAPI.getTypeMime("html") }); }, ReplyToTheTextMessageOfThisOfficialAccount(访问信息, 用户OpenID, 开发者号码, 时间戳, 回复的内容) { let 文本消息 = ` ` + 时间戳 + ` `; 访问信息["主动发送"]({ "发送数据": 文本消息, "数据协议": electronHttpServerAPI.getTypeMime("html") }); }, ReplyToThisOfficialAccountPictureMessage(访问信息, 用户OpenID, 开发者号码, 时间戳, 素材管理接口ID) { let 文本消息 = ` ` + 时间戳 + ` `; 访问信息["主动发送"]({ "发送数据": 文本消息, "数据协议": electronHttpServerAPI.getTypeMime("html") }); }, ReplyToThisOfficialAccountVoiceMessage(访问信息, 用户OpenID, 开发者号码, 时间戳, 素材管理接口ID) { let 文本消息 = ` ` + 时间戳 + ` `; 访问信息["主动发送"]({ "发送数据": 文本消息, "数据协议": electronHttpServerAPI.getTypeMime("html") }); }, ActivelySendingTemplateMessages(用户OpenID, 模板消息ID, 单击后载入网址 = "", 模板替换标题 = [], 模板替换数据 = []) { let 消息对象 = { "touser": 用户OpenID, "template_id": 模板消息ID, "url": 单击后载入网址, //留空则ios单击进入空页面,安卓无法单击 "data": {} //模版对象 }; try { if (单击后载入网址["appid"] != undefined) { 消息对象["miniprogram"] = 单击后载入网址 消息对象["url"] = "http://weixin.qq.com/download" } } catch (error) { } let 临时消息对象 = {} if (模板替换数据.length == 模板替换标题.length) { for (let 索引 = 0; 索引 < 模板替换标题.length; 索引++) { 临时消息对象[模板替换标题[索引]] = { "value": 模板替换数据[索引], "color": "#173177" }; } } 消息对象["data"] = 临时消息对象 FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(消息对象)); }, //菜单对象格式参考:https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html CreateOfficialAccountMenu(菜单对象) { FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(菜单对象)); }, SetUserNoteName(用户openid, 备注名称) { let 提交数据 = { "openid": 用户openid, "remark": 备注名称 }; FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(提交数据)); }, ObtainUserBasicInformation(用户openid) { //返回值相关介绍 https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId return FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + 获取的ACCESS_TOKEN + "&openid=" + 用户openid + "&lang=zh_CN", false); }, UserMovedToBlacklist(用户openid) { let 提交数据 = { "openid_list": [用户openid] }; FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/tags/members/batchblacklist?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(提交数据)); }, UserRemovalFromBlacklist(用户openid) { let 提交数据 = { "openid_list": [用户openid] }; FoFJsCodeJQAjax("https://api.weixin.qq.com/cgi-bin/tags/members/batchunblacklist?access_token=" + 获取的ACCESS_TOKEN, true, JSON.stringify(提交数据)); }, ObtainWeChatLoginLink(url连接, 回调标识) { return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + 储存_appid_ + "&redirect_uri=" + encodeURIComponent(url连接) + "&response_type=code&scope=snsapi_userinfo&forcePopup=true&state=" + 回调标识 + "#wechat_redirect"; }, WeChatLoginSuccessCallbackInformation(访问信息) { let 返回状态 = { "状态": "非登录回调" }; if (访问信息["链接地址"].indexOf("&state=") != -1 && 访问信息["链接地址"].indexOf("code=") != -1 && 访问信息["链接地址"].indexOf("&state=FOFwxpayZF") == -1) { if (访问信息["参数信息"]["code"].length == 32) { try { 返回状态["状态"] = "微信登录成功"; 返回状态["数据"] = JSON.parse(FoFJsCodeJQAjax("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + 储存_appid_ + "&secret=" + 储存_secret_ + "&code=" + 访问信息["参数信息"]["code"] + "&grant_type=authorization_code")); 返回状态["数据2"] = JSON.parse(FoFJsCodeJQAjax("https://api.weixin.qq.com/sns/userinfo?access_token=" + 返回状态["数据"]["access_token"] + "&openid=" + 返回状态["数据"]["openid"] + "&lang=zh_CN")); return 返回状态; } catch (error) { } } } return 返回状态; }, //注意:url不能带参数,例如https://www.ccc.com/asd?x1=123 这种是不被允许的;正确格式为:https://www.ccc.com/asd ObtainWeChatPaymentLink(url连接, 回调标识) { return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + 储存_appid_ + "&redirect_uri=" + encodeURIComponent(url连接) + "&response_type=code&scope=snsapi_userinfo&state=FOFwxpayZF" + encodeURIComponent(回调标识) + "#wechat_redirect"; }, WeChatTriggeredPaymentCallbackInformation(访问信息) { let 返回状态 = { "状态": "非开始支付回调" }; if (访问信息["链接地址"].indexOf("&state=") != -1 && 访问信息["链接地址"].indexOf("code=") != -1 && 访问信息["链接地址"].indexOf("&state=FOFwxpayZF") != -1) { if (访问信息["参数信息"]["code"].length == 32) { try { 返回状态["状态"] = "微信开始支付回调"; 返回状态["数据"] = JSON.parse(FoFJsCodeJQAjax("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + 储存_appid_ + "&secret=" + 储存_secret_ + "&code=" + 访问信息["参数信息"]["code"] + "&grant_type=authorization_code")); 返回状态["数据2"] = JSON.parse(FoFJsCodeJQAjax("https://api.weixin.qq.com/sns/userinfo?access_token=" + 返回状态["数据"]["access_token"] + "&openid=" + 返回状态["数据"]["openid"] + "&lang=zh_CN")); return 返回状态; } catch (error) { } } } return 返回状态; }, WeChatForPaymentVerification(访问信息, 订单编号, 商品名称, 支付成功回调URL, 服务器IP, openid, 支付金额, 支付页面描述) { let 最终数据 = `PHhtbD4KICAgIDxib2R5PjwhW0NEQVRBW+WVhuWTgeWQjeensF1dPjwvYm9keT4KICAgIDxvdXRfdHJhZGVfbm8+PCFbQ0RBVEFb6K6i5Y2V57yW5Y+3XV0+PC9vdXRfdHJhZGVfbm8+CiAgICA8dG90YWxfZmVlPuaUr+S7mOmHkeminTwvdG90YWxfZmVlPgogICAgPG5vdGlmeV91cmw+PCFbQ0RBVEFb5Zue6LCD5Zyw5Z2AXV0+PC9ub3RpZnlfdXJsPgogICAgPHRyYWRlX3R5cGU+PCFbQ0RBVEFbSlNBUEldXT48L3RyYWRlX3R5cGU+CiAgICA8YXBwaWQ+PCFbQ0RBVEFbQVBQSUTmm7/mjaJdXT48L2FwcGlkPgogICAgPG1jaF9pZD7llYbmiLflj7c8L21jaF9pZD4KICAgIDxzcGJpbGxfY3JlYXRlX2lwPjwhW0NEQVRBW+WuouaIt0lQXV0+PC9zcGJpbGxfY3JlYXRlX2lwPgogICAgPG5vbmNlX3N0cj48IVtDREFUQVvpmo/mnLrlrZfnrKbkuLJdXT48L25vbmNlX3N0cj4KICAgIDxvcGVuaWQ+PCFbQ0RBVEFb55So5oi3SUTmm7/mjaJdXT48L29wZW5pZD4KICAgIDxzaWduPjwhW0NEQVRBW+etvuWQjeaVsOaNrl1dPjwvc2lnbj4KPC94bWw+`; 最终数据 = FOFBase64Class.decode(最终数据) 访问信息["参数信息"]["state"] = 访问信息["参数信息"]["state"].replace("FOFwxpayZF", ""); 最终数据 = 最终数据.replace("APPID替换", 储存_appid_); 最终数据 = 最终数据.replace("随机字符串", 访问信息["参数信息"]["state"]); 最终数据 = 最终数据.replace("商户号", 储存_商户号_); 最终数据 = 最终数据.replace("订单编号", 订单编号); 最终数据 = 最终数据.replace("商品名称", 商品名称); 最终数据 = 最终数据.replace("回调地址", 支付成功回调URL); 最终数据 = 最终数据.replace("客户IP", 服务器IP); 最终数据 = 最终数据.replace("用户ID替换", openid); 最终数据 = 最终数据.replace("支付金额", 支付金额); 最终数据 = 最终数据.replace("签名数据", 微信支付_Sign(储存_APIv2密钥_, 储存_商户号_, 储存_appid_, 商品名称, 支付成功回调URL, 订单编号, 服务器IP, 支付金额, 访问信息["参数信息"]["state"], openid)); let 提交微信支付验签结果 = FoFJsCodeJQAjax("https://api.mch.weixin.qq.com/pay/unifiedorder", true, 最终数据); let 支付页面 = `PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDx0aXRsZT7lvq7kv6HmlK/ku5jnoa7orqTpobXpnaI8L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImxvZ2luLXN1Y2Nlc3MiPgogICAgICAgIDxkaXYgY2xhc3M9Ind4Ij4KICAgICAgICAgICAgPHN2ZyB0PSIxNjYyMTg0OTI2NDI2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICAgICAgICAgICAgICBwLWlkPSIyNjMwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+CiAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgIGQ9Ik02OTMuMTIgMzQ3LjI2NGMxMS43NzYgMCAyMy4zNiAwLjg5NiAzNS4wMDggMi4xNzYtMzEuMzYtMTQ2LjA0OC0xODcuNDU2LTI1NC41MjgtMzY1LjY5Ni0yNTQuNTI4QzE2My4yIDk0LjkxMiAwIDIzMC42NTYgMCA0MDMuMTM2YzAgOTkuNTIgNTQuMjcyIDE4MS4yNDggMTQ1LjAyNCAyNDQuNzM2TDEwOC44IDc1Ni44NjRsMTI2LjcyLTYzLjQ4OGM0NS4zMTIgOC44OTYgODEuNjY0IDE4LjExMiAxMjYuOTEyIDE4LjExMiAxMS4zOTIgMCAyMi42NTYtMC41MTIgMzMuNzkyLTEuMzQ0LTcuMDQtMjQuMjU2LTExLjItNDkuNi0xMS4yLTc2LjAzMkMzODUuMDg4IDQ3NS43NzYgNTIxLjAyNCAzNDcuMjY0IDY5My4xMiAzNDcuMjY0ek00OTguMzA0IDI0OS4wMjRjMjcuMzkyIDAgNDUuMzc2IDE3Ljk4NCA0NS4zNzYgNDUuMjQ4IDAgMjcuMTM2LTE3Ljk4NCA0NS4zMTItNDUuMzc2IDQ1LjMxMi0yNy4wNzIgMC01NC4zMzYtMTguMTc2LTU0LjMzNi00NS4zMTJDNDQzLjk2OCAyNjYuOTQ0IDQ3MS4xNjggMjQ5LjAyNCA0OTguMzA0IDI0OS4wMjR6TTI0NC42NzIgMzM5LjU4NGMtMjcuMiAwLTU0LjU5Mi0xOC4xNzYtNTQuNTkyLTQ1LjMxMiAwLTI3LjI2NCAyNy4zOTItNDUuMjQ4IDU0LjU5Mi00NS4yNDhTMjg5LjkyIDI2Ni45NDQgMjg5LjkyIDI5NC4yNzJDMjg5LjkyIDMyMS40MDggMjcxLjg3MiAzMzkuNTg0IDI0NC42NzIgMzM5LjU4NHpNMTAyNCA2MjkuNzZjMC0xNDQuODk2LTE0NS4wMjQtMjYyLjk3Ni0zMDcuOTA0LTI2Mi45NzYtMTcyLjQ4IDAtMzA4LjIyNCAxMTguMTQ0LTMwOC4yMjQgMjYyLjk3NiAwIDE0NS4yOCAxMzUuODA4IDI2Mi45NzYgMzA4LjIyNCAyNjIuOTc2IDM2LjA5NiAwIDcyLjUxMi05LjAyNCAxMDguNzM2LTE4LjExMmw5OS4zOTIgNTQuNTI4LTI3LjI2NC05MC42MjRDOTY5LjcyOCA3ODMuODcyIDEwMjQgNzExLjQ4OCAxMDI0IDYyOS43NnpNNjE2LjEyOCA1ODQuMzg0Yy0xNy45ODQgMC0zNi4yMjQtMTcuOTItMzYuMjI0LTM2LjIyNCAwLTE4LjA0OCAxOC4yNC0zNi4yMjQgMzYuMjI0LTM2LjIyNCAyNy41MiAwIDQ1LjM3NiAxOC4xNzYgNDUuMzc2IDM2LjIyNEM2NjEuNTA0IDU2Ni40NjQgNjQzLjY0OCA1ODQuMzg0IDYxNi4xMjggNTg0LjM4NHpNODE1LjQ4OCA1ODQuMzg0Yy0xNy44NTYgMC0zNi4wMzItMTcuOTItMzYuMDMyLTM2LjIyNCAwLTE4LjA0OCAxOC4xMTItMzYuMjI0IDM2LjAzMi0zNi4yMjQgMjcuMjY0IDAgNDUuMzc2IDE4LjE3NiA0NS4zNzYgMzYuMjI0Qzg2MC44NjQgNTY2LjQ2NCA4NDIuNzUyIDU4NC4zODQgODE1LjQ4OCA1ODQuMzg0eiIKICAgICAgICAgICAgICAgICAgICBwLWlkPSIyNjMxIiBmaWxsPSIjMTVkMzZhIj48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICAgIDxoMj7mlK/ku5jnoa7orqQ8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9InRleHQiPgogICAgICAgICAgICA8cD4ke1RleHR9PC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9Im9uQnJpZGdlUmVhZHkoKSI+PGJ1dHRvbiBjbGFzcz0iYnRuIj7ngrnlh7vlvIDlp4vmlK/ku5g8L2J1dHRvbj48L2E+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgICBib2R5IHsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB9CgogICAgICAgIC5sb2dpbi1zdWNjZXNzIHsKICAgICAgICAgICAgcGFkZGluZy10b3A6IDEyMHB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubG9naW4tc3VjY2VzcyAud3ggc3ZnIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDBweDsKICAgICAgICB9CgogICAgICAgIC5sb2dpbi1zdWNjZXNzIGgyIHsKICAgICAgICAgICAgY29sb3I6ICMyNWMwOWY7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIC5sb2dpbi1zdWNjZXNzIC50ZXh0IHsKICAgICAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CgogICAgICAgIC5sb2dpbi1zdWNjZXNzIC5idG4gewogICAgICAgICAgICBtYXJnaW4tdG9wOiA0MHB4OwogICAgICAgICAgICB3aWR0aDogNzV2dzsKICAgICAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgICAgICBsaW5lLWhlaWdodDogMzhweDsKICAgICAgICAgICAgcGFkZGluZzogMCAzNXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTVkMzZhOwogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMxNWQzNmEgMCUsICMyNzZhNDUgMTAwJSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBvbkJyaWRnZVJlYWR5KCkgewogICAgICAgICAgICBXZWl4aW5KU0JyaWRnZS5pbnZva2UoCiAgICAgICAgICAgICAgICAnZ2V0QnJhbmRXQ1BheVJlcXVlc3QnLCB7CiAgICAgICAgICAgICAgICAiYXBwSWQiOiAiJHthcHBJZH0iLCAgICAgLy/lhazkvJflj7dJRO+8jOeUseWVhuaIt+S8oOWFpSAgICAgCiAgICAgICAgICAgICAgICAidGltZVN0YW1wIjogIiR7VGltZX0iLCAgICAgICAgIC8v5pe26Ze05oiz77yM6IeqMTk3MOW5tOS7peadpeeahOenkuaVsCAgICAgCiAgICAgICAgICAgICAgICAibm9uY2VTdHIiOiAiJHtTdHJEYXRhfSIsIC8v6ZqP5py65LiyICAgICAKICAgICAgICAgICAgICAgICJwYWNrYWdlIjogInByZXBheV9pZD0ke3BhY2thZ2V9IiwKICAgICAgICAgICAgICAgICJzaWduVHlwZSI6ICJNRDUiLCAgICAgICAgIC8v5b6u5L+h562+5ZCN5pa55byP77yaICAgICAKICAgICAgICAgICAgICAgICJwYXlTaWduIjogIiR7U2luZ30iIC8v5b6u5L+h562+5ZCNIAogICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZXJyX21zZyA9PSAiZ2V0X2JyYW5kX3djcGF5X3JlcXVlc3Q6b2siKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWY9IiR7T0tVUkx9IgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+`; 支付页面 = FOFBase64Class.decode(支付页面); 支付页面 = 支付页面.replace("${Text}", 支付页面描述) 支付页面 = 支付页面.replace("${appId}", 储存_appid_) const time = Math.round(new Date().getTime() / 1000).toString(); 支付页面 = 支付页面.replace("${Time}", time) 支付页面 = 支付页面.replace("${StrData}", 访问信息["参数信息"]["state"]) 支付页面 = 支付页面.replace("${package}", 取文本中间_(提交微信支付验签结果, "<") != -1) { 支付回调信息["状态"] = "支付成功"; 支付回调信息["支付状态"] = 取文本中间_(支付成功信息, "", ""); 支付回调信息["用户是否关注公众号"] = 取文本中间_(支付成功信息, "= 2) { 分割的内容 = 分割的内容[1].split(结束内容); if (分割的内容.length >= 1) { 返回内容 = 分割的内容[0]; } } } return 返回内容; } function 微信支付_Sign(参密钥, 商户号, APPID, 商品名称, 回调地址, 订单编号, 客户IP, 支付金额, 随机字符串, 用户ID) { let 验签URL = "appid=APPID替换&body=商品名称&mch_id=商户号&nonce_str=随机字符串¬ify_url=回调地址&openid=用户ID替换&out_trade_no=订单编号&spbill_create_ip=客户IP&total_fee=支付金额&trade_type=JSAPI&key=参密钥"; 验签URL = 验签URL.replace("APPID替换", APPID); 验签URL = 验签URL.replace("随机字符串", 随机字符串); 验签URL = 验签URL.replace("商品名称", 商品名称); 验签URL = 验签URL.replace("商户号", 商户号); 验签URL = 验签URL.replace("回调地址", 回调地址); 验签URL = 验签URL.replace("订单编号", 订单编号); 验签URL = 验签URL.replace("客户IP", 客户IP); 验签URL = 验签URL.replace("支付金额", 支付金额); 验签URL = 验签URL.replace("参密钥", 参密钥); 验签URL = 验签URL.replace("用户ID替换", 用户ID); return FOFMD5Class.FOFMD5(验签URL).toUpperCase(); } function JSAPI_SING(参密钥, 回调标识, APPID, JSAPI专用ID, 时间戳) { let 验签URL = "appId=appId替换&nonceStr=nonceStr替换&package=package替换&signType=signType替换&timeStamp=timeStamp替换&key=密钥"; 验签URL = 验签URL.replace("appId替换", APPID); 验签URL = 验签URL.replace("nonceStr替换", 回调标识); 验签URL = 验签URL.replace("package替换", "prepay_id=" + JSAPI专用ID); 验签URL = 验签URL.replace("signType替换", "MD5"); 验签URL = 验签URL.replace("timeStamp替换", 时间戳); 验签URL = 验签URL.replace("密钥", 参密钥); return FOFMD5Class.FOFMD5(验签URL).toUpperCase(); }