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();
}