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

微信支付相关js的更多相关文章

  1. .NET接入微信支付(一)JS API接入 V3

    前段时间刚接完银联支付,完事后又接了微信支付,前段时间一直急着上线,微信的接入一直没有时间处理,今天我们就来整理一下微信支付的接入方法和要点. 配置: 首先呢微信支付需要通过审核,审核啥的准备工作我就 ...

  2. 微信支付相关,如何获取API证书

    参考腾讯官方文档: http://kf.qq.com/faq/161222NneAJf161222U7fARv.html?pass_ticket=4K97qCCjgTaO4WwN1x%2BCdKEqL ...

  3. 微信JS支付代码_前端调用微信支付接口

    转自:http://dditblog.com/itshare_553.html 跟大家分享一段微信支付的js代码片段.V3版的微信支付没有paySignKey参数.基本上是直接复制就可以使用了.改一改 ...

  4. 微信支付JS API使用心得

    微信的接口真的很坑爹,只返回成功或失败,从来不会告诉你为什么失败.这个微信支付的js接口也是调了一个下午才成功,期间踩了不少坑,在这里总结一下,而且把支付接口封装成了一个js文件,这样以后调用就很方便 ...

  5. PHP微信支付开发实例

    这篇文章主要为大家详细介绍了PHP微信支付开发过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PHP微信支付开发过程,分享给大家,供大家参考,具体内容如下 1.开发环境 Thinkphp 3. ...

  6. 微信支付开发-Senparc.Weixin.MP详解

    年底了,反而工作更忙了,我从15年11月开始写<1024伐木累>系列小说和爆笑对白,得到了很多身边的技术好友的支持,现在爆笑对白已经有越来越多的朋友一起帮着写段子,整理,包括小说内容的编辑 ...

  7. 微信支付开发(1) 微信支付URL配置

    由于微信支付接口更新,本文档已过期,请查看新版微信支付教程.地址 http://www.cnblogs.com/txw1958/category/624506.html 本文介绍微信支付申请时如何设置 ...

  8. C#微信支付

    回归主题,16年1月初我对微信开发比较好奇,由于自己是一个比较喜欢钱的人,所以对支付功能颇为冲动,就用公司信息在微信平台申请了一个服务号,还给腾讯打赏了300大洋做了下认证,抽空看了下微信支付官方的文 ...

  9. 微信支付v2开发(1) 微信支付URL配置

    本文介绍微信支付申请时如何设置授权目录及URL. 在申请微信支付时,第一项就会碰到下图的配置. 下面就对这一设置进行讲解! 一.选择支付类型 目前有两种支付类型 JS API网页支付 Native原生 ...

随机推荐

  1. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  2. HQL之动态分区调整

    动态分区插入可以基于查询语句分出出要插入的分区名称.比如,下面向分区表插入数据的SQL: insert into table chavin.emp_pat partition(dname,loc) s ...

  3. C和C指针小记(九)-指针用法1

    1. *p++ 最常用的一个指针的用法,就是在循环中用来迭代. *p++ 共有3步操作: 1.++操作符把p所指向的内存中的值复制一份 2.++操作符把p加1(实际是一个p所指内存单元的大小,这也是编 ...

  4. minikube k8 ingress--https://kubernetes.io/docs

    https://ehlxr.me/2018/01/12/kubernetes-minikube-installation/[Kubernetes 学习笔记之 MiniKube 安装 in CHINA] ...

  5. dyld环境变量

    苹果APP启动,分为两个过程:系统dylib动态链接库 app的main函数启动过程. main函数过程直接对iOS开发者.这里备忘的dylib过程: 一.dyld加载到虚拟内存     1. loa ...

  6. dhttp与IdCookieManager处理登陆过程

    dhttp与IdCookieManager处理登陆过程 我们知道,用IE注册网页(象论坛)时,它能够自动找出相应的Cookie并提交给服务器,从而使用户不用重新登录就能够看到与他自己帐号有关的内容.这 ...

  7. 浏览器数据库 IndexedDB 入门教程

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  8. 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay

    正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...

  9. 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结

    <Java并发编程实战>和<Java并发编程的艺术>           Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...

  10. React之生命周期

    哈喽,这是我的第一篇博客,请大家多多关照~ 追根溯源:What's the lifeCycle? 生命周期函数指在某一时刻组件会自动调用执行的函数: React生命周期概览: 接下来我们就着生命周期的 ...