微信支付相关js

import $ from "jquery"

/*支付功能开始*/
let ip="";
let nonceStr;
let appId;
let mchId;
let APISecret;
let userOpenId="";
let notifyUrl="";
let wx_url = urlWay.host;
let hex_chr = "0123456789abcdefghijklmnopqrstuvwxyz";
let _this_obj = '';

export default function (obj) {
_this_obj = obj;

return {
paycall : paycall
}
}
//openID
function getUserId() {
$.ajax({
url: wx_url + 'wx/getOpenId.action',
cache:false,
async:false,
data:{action:"openId"},
success:function(result) {
userOpenId=result.openId;
//alert(userOpenId + '1');
},
error: function (x) {
//alert('1'+JSON.stringify(x));
}
});
return userOpenId;
}
//获取openid结束 2015-7-18 17:06:56-----------------------------------------------------------------------------------------------------

function getTimeStamp(){
let timestamp=new Date().getTime();
let timestampstring = timestamp.toString();//一定要转换字符串
return timestampstring;
}
//获取精确到毫秒的时间字符串-----------------------------------------------------------------------------------------------------------------

function getNonceStr(){
let $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let maxPos = $chars.length;
let noceStr = "";
for (let i = 0; i < 32; i++) {
noceStr += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return noceStr;
}
//获取32位随机字符串-------------------------------------------------------------------------------------------------------------------------

function getRemoteIp() {
let remoteIp="";
$.ajax({
url:wx_url+'wx/configManage.action', // 跳转到 action
data:{action:"getRemoteIp"},
cache:false,
async:false,
success:function(result) {
remoteIp=result.ip;
//alert(remoteIp+'2');
},
error:function(x, textStatus, errorThrown) {
//alert('2'+JSON.stringify(x));
}
});
return remoteIp;
}
//获取到ip地址-----------------------------------------------------------------------------------------------------------------------------

function getAppId() {
let appId="";
$.ajax({
url:wx_url+'wx/configManage.action', // 跳转到 action
data:{action:"getProperty", propertyName:"corpIdFamilyDoctor"},
cache:false,
async:false,
success:function(result) {
appId=result.propertyValue;
//alert(appId+'3');
},
error:function(x, textStatus, errorThrown) {
//alert("3"+JSON.stringify(x));
}
});
return appId;
}
//获取到appid---------------------------------------------------------------------------------------------------------------------------------

function getMchId() {
let mchId="";
$.ajax({
url:wx_url+'wx/configManage.action', // 跳转到 action
data:{action:"getProperty", propertyName:"mchIdFamilyDoctor"},
cache:false,
async:false,
success:function(result) {
mchId=result.propertyValue;
//alert(mchId+'4'); }, error:function(x, textStatus, errorThrown) { //alert('4'+JSON.stringify(x)); } }); return mchId;}//获取到微信支付的商户号-------------------------------------------------------------------------------------------------------------------------------function getAPISecret() { let APISecret=""; $.ajax({ url:wx_url+'wx/configManage.action', // 跳转到 action data:{action:"getProperty", propertyName:"corpSecretFamilyDoctor"}, cache:false, async:false, success:function(result) { APISecret=result.propertyValue; //alert(APISecret+'5'); }, error:function(x, textStatus, errorThrown) { //alert('5'+JSON.stringify(x)); } }); return APISecret;}//获取到微信支付应用密匙---------------------------------------------------------------------------------------------------------------------------------//下面开始获取notifyUrl------------------------------------------------------------------------------------------------------------------------------function getNotifyUrl(){ $.ajax({ type:'post', url:wx_url+'wx/configManage.action', data:{action:"getProperty", propertyName:"notify_url"}, cache:false, async:false, success:function(result){ notifyUrl=result.propertyValue; //alert(notifyUrl+'6'); }, error: function (x) { //alert('6'+JSON.stringify(x)); } }); return notifyUrl;}//调用微信支付-----------------------------------------------------------------------------------------------------------------------------------------function paycall(orderDesc, orderNum, orderAmount) { userOpenId=getUserId(); ip=getRemoteIp(); nonceStr=getNonceStr(); appId = getAppId(); mchId = getMchId(); APISecret = getAPISecret(); if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(orderDesc, orderNum, orderAmount); }}function onBridgeReady(orderDesc, orderNum, orderAmount){ let prepId = getPrePayId(orderDesc,orderNum,orderAmount); let timeStr = getTimeStamp(); let nonStr = getNonceStr(); let signStringforPay="appId="+appId+"&nonceStr="+nonStr+"&package=prepay_id="+prepId+"&signType=MD5&timeStamp="+timeStr+"&key="+APISecret; signStringforPay=MD5(signStringforPay); signStringforPay=signStringforPay.toUpperCase(); appId=appId+""; timeStr=timeStr+""; nonStr=nonStr+""; signStringforPay=signStringforPay+""; // alert(signStringforPay); WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":appId, //公众号名称,由商户传入 "timeStamp":timeStr, //时间戳,自1970年以来的秒数 "nonceStr":nonStr, //随机串 "package":"prepay_id=" + prepId, "signType":"MD5", //微信签名方式: "paySign":signStringforPay //微信签名 }, function(res){ _this_obj.whetherToPay(res); } );}function getPrePayId(orderDesc,orderNum,orderAmount) { let prepayId=""; let orderNumCopy=orderNum; notifyUrl=getNotifyUrl(); let signString="appid="+ appId +"&body="+orderDesc+"&mch_id=" + mchId + "&nonce_str="+nonceStr+"&notify_url="+notifyUrl+"&openid="+userOpenId+"&out_trade_no="+orderNumCopy+"&spbill_create_ip="+ip+"&total_fee="+orderAmount+"&trade_type=JSAPI&key="+APISecret; // alert("signString=="+signString);//测试 signString=MD5(signString); signString=signString.toUpperCase(); //alert(signString); $.ajax({ url:wx_url+'wx/getPrepayId.action', // 跳转到 action data:{action:"getPrepayId",mchId:mchId,tradeNo:orderNum,remoteIp:ip,nonceStr:nonceStr,signStr:signString,userOpenId:userOpenId,body:orderDesc,totalFee:orderAmount}, cache:false, async:false, success:function(result) { let resultXml=result.result; prepayId= resultXml.substring(resultXml.indexOf("<prepay_id>")+20,resultXml.indexOf("</prepay_id>")-3); //alert('1'+JSON.stringify(result)); //alert('2'+JSON.stringify(prepayId)); }, error:function(XMLHttpRequest, textStatus, errorThrown) { //alert('7'+JSON.stringify(XMLHttpRequest)); } }); return prepayId;}//加密function rhex(num) { let str = ""; for (let j = 0; j <= 3; j++) { str += hex_chr.charAt((num >> (j * 8 + 4)) & 15) + hex_chr.charAt((num >> (j * 8)) & 15); } return str;}function str2blks_MD5(str) { let nblk = ((str.length + 8) >> 6) + 1; let blks = new Array(nblk * 16); for (let i = 0; i < nblk * 16; i++) { blks[i] = 0; } let j; for (j = 0; j < str.length; j++) { blks[j >> 2] |= str.charCodeAt(j) << ((j % 4) * 8); } blks[j >> 2] |= 128 << ((j % 4) * 8); blks[nblk * 16 - 2] = str.length * 8; return blks;}function add(x, y) { let lsw = (x & 65535) + (y & 65535); let msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 65535);}function rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt));}function cmn(q, a, b, x, s, t) { return add(rol(add(add(a, q), add(x, t)), s), b);}function ff(a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t);}function gg(a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t);}function hh(a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t);}function ii(a, b, c, d, x, s, t) { return cmn(c ^ (b | (~d)), a, b, x, s, t);}function MD5(str) { let x = str2blks_MD5(str); let a = 1732584193; let b = -271733879; let c = -1732584194; let d = 271733878; for (let i = 0; i < x.length; i += 16) { let olda = a; let oldb = b; let oldc = c; let oldd = d; a = ff(a, b, c, d, x[i + 0], 7, -680876936); d = ff(d, a, b, c, x[i + 1], 12, -389564586); c = ff(c, d, a, b, x[i + 2], 17, 606105819); b = ff(b, c, d, a, x[i + 3], 22, -1044525330); a = ff(a, b, c, d, x[i + 4], 7, -176418897); d = ff(d, a, b, c, x[i + 5], 12, 1200080426); c = ff(c, d, a, b, x[i + 6], 17, -1473231341); b = ff(b, c, d, a, x[i + 7], 22, -45705983); a = ff(a, b, c, d, x[i + 8], 7, 1770035416); d = ff(d, a, b, c, x[i + 9], 12, -1958414417); c = ff(c, d, a, b, x[i + 10], 17, -42063); b = ff(b, c, d, a, x[i + 11], 22, -1990404162); a = ff(a, b, c, d, x[i + 12], 7, 1804603682); d = ff(d, a, b, c, x[i + 13], 12, -40341101); c = ff(c, d, a, b, x[i + 14], 17, -1502002290); b = ff(b, c, d, a, x[i + 15], 22, 1236535329); a = gg(a, b, c, d, x[i + 1], 5, -165796510); d = gg(d, a, b, c, x[i + 6], 9, -1069501632); c = gg(c, d, a, b, x[i + 11], 14, 643717713); b = gg(b, c, d, a, x[i + 0], 20, -373897302); a = gg(a, b, c, d, x[i + 5], 5, -701558691); d = gg(d, a, b, c, x[i + 10], 9, 38016083); c = gg(c, d, a, b, x[i + 15], 14, -660478335); b = gg(b, c, d, a, x[i + 4], 20, -405537848); a = gg(a, b, c, d, x[i + 9], 5, 568446438); d = gg(d, a, b, c, x[i + 14], 9, -1019803690); c = gg(c, d, a, b, x[i + 3], 14, -187363961); b = gg(b, c, d, a, x[i + 8], 20, 1163531501); a = gg(a, b, c, d, x[i + 13], 5, -1444681467); d = gg(d, a, b, c, x[i + 2], 9, -51403784); c = gg(c, d, a, b, x[i + 7], 14, 1735328473); b = gg(b, c, d, a, x[i + 12], 20, -1926607734); a = hh(a, b, c, d, x[i + 5], 4, -378558); d = hh(d, a, b, c, x[i + 8], 11, -2022574463); c = hh(c, d, a, b, x[i + 11], 16, 1839030562); b = hh(b, c, d, a, x[i + 14], 23, -35309556); a = hh(a, b, c, d, x[i + 1], 4, -1530992060); d = hh(d, a, b, c, x[i + 4], 11, 1272893353); c = hh(c, d, a, b, x[i + 7], 16, -155497632); b = hh(b, c, d, a, x[i + 10], 23, -1094730640); a = hh(a, b, c, d, x[i + 13], 4, 681279174); d = hh(d, a, b, c, x[i + 0], 11, -358537222); c = hh(c, d, a, b, x[i + 3], 16, -722521979); b = hh(b, c, d, a, x[i + 6], 23, 76029189); a = hh(a, b, c, d, x[i + 9], 4, -640364487); d = hh(d, a, b, c, x[i + 12], 11, -421815835); c = hh(c, d, a, b, x[i + 15], 16, 530742520); b = hh(b, c, d, a, x[i + 2], 23, -995338651); a = ii(a, b, c, d, x[i + 0], 6, -198630844); d = ii(d, a, b, c, x[i + 7], 10, 1126891415); c = ii(c, d, a, b, x[i + 14], 15, -1416354905); b = ii(b, c, d, a, x[i + 5], 21, -57434055); a = ii(a, b, c, d, x[i + 12], 6, 1700485571); d = ii(d, a, b, c, x[i + 3], 10, -1894986606); c = ii(c, d, a, b, x[i + 10], 15, -1051523); b = ii(b, c, d, a, x[i + 1], 21, -2054922799); a = ii(a, b, c, d, x[i + 8], 6, 1873313359); d = ii(d, a, b, c, x[i + 15], 10, -30611744); c = ii(c, d, a, b, x[i + 6], 15, -1560198380); b = ii(b, c, d, a, x[i + 13], 21, 1309151649); a = ii(a, b, c, d, x[i + 4], 6, -145523070); d = ii(d, a, b, c, x[i + 11], 10, -1120210379); c = ii(c, d, a, b, x[i + 2], 15, 718787259); b = ii(b, c, d, a, x[i + 9], 21, -343485551); a = add(a, olda); b = add(b, oldb); c = add(c, oldc); d = add(d, oldd); } return rhex(a) + rhex(b) + rhex(c) + rhex(d);}
原文地址:https://www.cnblogs.com/myfirstboke/p/8512824.html