uni-app 微信支付
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">小程序 支付 </span></h4><p class="md-end-block md-p"><span class="md-plain">先看官方文档 <span class="md-link md-pair-s">https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml</span></span></p>
<p class="md-end-block md-p"><span class="md-plain">知晓有那些比不可少的流程,之后后端确定返回的参数值,用于前端支付。参数值必须一一对应,不然支付会失败</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">uni.requestPayment({
timeStamp: data.timeStamp, </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">当前的时间</span>
nonceStr: data.nonceStr, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">随机字符串</span>
package: data.package, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">统一下单接口返回的 prepay_id 参数值</span>
signType: data.signType, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">签名算法,暂支持 MD5。</span>
paySign: data.paySign, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">签名</span>
<span style="color: rgba(0, 0, 0, 1)"> success(res) {
console.log(</span>'成功'<span style="color: rgba(0, 0, 0, 1)">, res);
},
fail: (res) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'失败'<span style="color: rgba(0, 0, 0, 1)">, res);
},
})</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">小程序支付相对简单。支付的订单信息多要在后端生成。返回订单信息给前端调用支付API</span></p>
<h4 class="md-end-block md-heading"><span class="md-plain">APP支付</span></h4>
<p class="md-end-block md-p"><span class="md-plain">app支付方法和小程序基本相同,就是app要配置的地方不少</span></p>
<pre></pre>
<p class="md-end-block md-p"><span class="md-plain">还是先看开发官方文档,基础的准备好。<span class="md-link md-pair-s">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml</span></span></p>
<pre></pre>
<p class="md-end-block md-p"><span class="md-plain md-expand">之后在uni的目录中找到manifest.json 打开 选择app模卡--支付前面打个勾</span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163143771-224507264.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p"> </p>
<p class="md-end-block md-p">这边只对微信支付,所以微信支付勾上 ,把微信平台的appid 放到对应的输入框里面</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取服务供应商</span>
<span style="color: rgba(0, 0, 0, 1)"> uni.getProvider({
service: </span>'payment'<span style="color: rgba(0, 0, 0, 1)">,
success: (res) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'getProvider', res) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">服务类型:payment</span>
console.log('服务类型', res.provider) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回的是 微信 支付宝</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在这里请求接口拿到返回的订单数据 用于调起支付</span>
that.sponsorPro(res.data) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 支付 res.data 为后端返回的订单信息</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这个判断 是否有微信 不要加 真机调试不会过 测试可以过</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(res.provider.indexOf('wxpay'<span style="color: rgba(0, 0, 0, 1)">)){}
}
})</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">发起支付 </span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand">md5().toUpperCase() 截取签名前30位为 小写转大写 </span></p>
<p class="md-end-block md-p"><span class="md-plain">md5为单独的一个js,代码在最后</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">sponsorPro(data) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">data 为后端的参数</span>
let info =<span style="color: rgba(0, 0, 0, 1)"> {
</span>"appid"<span style="color: rgba(0, 0, 0, 1)">: data.appId,
</span>"partnerid"<span style="color: rgba(0, 0, 0, 1)">: data.mchid,
</span>"package": 'Sign=WXPay'<span style="color: rgba(0, 0, 0, 1)">,
</span>"package"<span style="color: rgba(0, 0, 0, 1)">: data.package,
</span>"noncestr"<span style="color: rgba(0, 0, 0, 1)">: data.noncestr,
</span>"timestamp"<span style="color: rgba(0, 0, 0, 1)">: data.timestamp,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "sign": data.paySign,</span>
"sign"<span style="color: rgba(0, 0, 0, 1)">: md5(data.sign).toUpperCase(),
}
console.log(</span>'发起支付'<span style="color: rgba(0, 0, 0, 1)">, info);
uni.requestPayment({
provider: </span>'wxpay'<span style="color: rgba(0, 0, 0, 1)">,
signType: </span>"MD5"<span style="color: rgba(0, 0, 0, 1)">,
orderInfo: info,
success(res) {
console.log(</span>'成功:' +<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(res));
},
fail(err) {
console.log(</span>'失败:' +<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(err));
}
})
}<br></span></pre>
</div>
<p>info 的参数 和官方返回的参数必须一致</p>
<p><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163229205-302449210.png" alt="" loading="lazy"></p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">判断微信是否安装</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (plus.runtime.isApplicationExist({
pname: </span>'com.tencent.mm'<span style="color: rgba(0, 0, 0, 1)">,
action: </span>'weixin://'<span style="color: rgba(0, 0, 0, 1)">
})) {
console.log(</span>"微信应用已安装"<span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>"微信应用未安装"<span style="color: rgba(0, 0, 0, 1)">);
}</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">可以用上面这个判断微信是否安装</span></p>
<p class="md-end-block md-p"><span class="md-plain">官方地址 <span class="md-link md-pair-s md-expand">http://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.isApplicationExist</span></span></p>
<h4 class="md-end-block md-heading"><span class="md-plain">微信支付调用失败<span class="md-tab"> <span class="md-plain"><span class="md-plain">General errors","errCode":-100,"code":-100 </span></span></span></span></span></h4>
<p class="md-end-block md-p"><span class="md-plain">payment微信:-1 是微信的错误代码提示 </span></p>
<p class="md-end-block md-p"><span class="md-plain">"errCode":-100," code":-100 为uni-app 错误代码提示</span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong>特别要注意第一次提交时报的是什么错误,这样对症下药</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">要是提示: 包名(签名)与开放平台包名(签名)不一致 ,先检查打包的包名(签名)是什么,然后对比与线上的名字一致</span></p>
<p class="md-end-block md-p"> </p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210524092412909-1249960661.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p class="md-end-block md-p"> </p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163452949-1235823561.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p"> </p>
<h4 class="md-end-block md-p md-focus"><span class="md-plain">app签名查看工具 </span></h4>
<p>下载地址 <span class="md-link md-pair-s">https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html</span></p>
<p><span class="md-link md-pair-s"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163546753-1078563581.png" alt="" loading="lazy"></span></p>
<p> </p>
<p class="md-end-block md-p md-focus"><span class="md-plain">下载安装到手机 打开 输入包名 签名</span></p>
<p class="md-end-block md-p"><span class="md-plain">要先打包,把你需要获取签名的包安装到手机上,然后安装签名获取工具打开输入包名</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163601906-1505737649.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p"> </p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">ios支付</span></h4>
<p class="md-end-block md-p"><span class="md-plain">要先创建一个uni-app 账号 开通 云服务空间和开通前端网页托管</span></p>
<p class="md-end-block md-p"><span class="md-plain">详情看官方流程 <span class="md-link md-pair-s">https://uniapp.dcloud.io/api/plugins/universal-links</span></span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163619640-821410718.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p"> </p>
<p class="md-end-block md-p"><span class="md-plain md-expand">在添加域名时报---<span class="md-pair-s md-expand"><strong><span class="md-plain">设置一个三级域名就好</span></strong></span></span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163657714-989223911.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p"> </p>
<p class="md-end-block md-p md-focus"><span class="md-pair-s "><strong>附:md5.js源码</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand">在页面中引用 import md5 from '../../common/md5.js' </span></p>
<p class="md-end-block md-p"><span class="md-plain">form 后面为存放地址</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* JavaScript MD5
* https://github.com/blueimp/JavaScript-MD5
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*
* Based on
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> global define </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
;(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> ($) {
</span>'use strict'
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> safeAdd (x, y) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> lsw = (x & 0xffff) + (y & 0xffff<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">var</span> msw = (x >> 16) + (y >> 16) + (lsw >> 16<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> (msw << 16) | (lsw & 0xffff<span style="color: rgba(0, 0, 0, 1)">)
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Bitwise rotate a 32-bit number to the left.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> bitRotateLeft (num, cnt) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> (num << cnt) | (num >>> (32 -<span style="color: rgba(0, 0, 0, 1)"> cnt))
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* These functions implement the four basic operations the algorithm uses.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> md5cmn (q, a, b, x, s, t) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> md5ff (a, b, c, d, x, s, t) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> md5cmn((b & c) | (~b &<span style="color: rgba(0, 0, 0, 1)"> d), a, b, x, s, t)
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> md5gg (a, b, c, d, x, s, t) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> md5cmn((b & d) | (c & ~<span style="color: rgba(0, 0, 0, 1)">d), a, b, x, s, t)
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> md5hh (a, b, c, d, x, s, t) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> md5cmn(b ^ c ^<span style="color: rgba(0, 0, 0, 1)"> d, a, b, x, s, t)
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> md5ii (a, b, c, d, x, s, t) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> md5cmn(c ^ (b | ~<span style="color: rgba(0, 0, 0, 1)">d), a, b, x, s, t)
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Calculate the MD5 of an array of little-endian words, and a bit length.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> binlMD5 (x, len) {
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> append padding </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
x |= 0x80 << (len % 32<span style="color: rgba(0, 0, 0, 1)">)
x[((len </span>+ 64) >>> 9 << 4) + 14] =<span style="color: rgba(0, 0, 0, 1)"> len
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> i
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> olda
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> oldb
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> oldc
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> oldd
</span><span style="color: rgba(0, 0, 255, 1)">var</span> a = 1732584193
<span style="color: rgba(0, 0, 255, 1)">var</span> b = -271733879
<span style="color: rgba(0, 0, 255, 1)">var</span> c = -1732584194
<span style="color: rgba(0, 0, 255, 1)">var</span> d = 271733878
<span style="color: rgba(0, 0, 255, 1)">for</span> (i = 0; i < x.length; i += 16<span style="color: rgba(0, 0, 0, 1)">) {
olda </span>=<span style="color: rgba(0, 0, 0, 1)"> a
oldb </span>=<span style="color: rgba(0, 0, 0, 1)"> b
oldc </span>=<span style="color: rgba(0, 0, 0, 1)"> c
oldd </span>=<span style="color: rgba(0, 0, 0, 1)"> d
a </span>= md5ff(a, b, c, d, x, 7, -680876936<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ff(d, a, b, c, x, 12, -389564586<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ff(c, d, a, b, x, 17, 606105819<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ff(b, c, d, a, x, 22, -1044525330<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ff(a, b, c, d, x, 7, -176418897<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ff(d, a, b, c, x, 12, 1200080426<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ff(c, d, a, b, x, 17, -1473231341<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ff(b, c, d, a, x, 22, -45705983<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ff(a, b, c, d, x, 7, 1770035416<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ff(d, a, b, c, x, 12, -1958414417<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ff(c, d, a, b, x, 17, -42063<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ff(b, c, d, a, x, 22, -1990404162<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ff(a, b, c, d, x, 7, 1804603682<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ff(d, a, b, c, x, 12, -40341101<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ff(c, d, a, b, x, 17, -1502002290<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ff(b, c, d, a, x, 22, 1236535329<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5gg(a, b, c, d, x, 5, -165796510<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5gg(d, a, b, c, x, 9, -1069501632<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5gg(c, d, a, b, x, 14, 643717713<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5gg(b, c, d, a, x, 20, -373897302<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5gg(a, b, c, d, x, 5, -701558691<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5gg(d, a, b, c, x, 9, 38016083<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5gg(c, d, a, b, x, 14, -660478335<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5gg(b, c, d, a, x, 20, -405537848<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5gg(a, b, c, d, x, 5, 568446438<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5gg(d, a, b, c, x, 9, -1019803690<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5gg(c, d, a, b, x, 14, -187363961<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5gg(b, c, d, a, x, 20, 1163531501<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5gg(a, b, c, d, x, 5, -1444681467<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5gg(d, a, b, c, x, 9, -51403784<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5gg(c, d, a, b, x, 14, 1735328473<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5gg(b, c, d, a, x, 20, -1926607734<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5hh(a, b, c, d, x, 4, -378558<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5hh(d, a, b, c, x, 11, -2022574463<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5hh(c, d, a, b, x, 16, 1839030562<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5hh(b, c, d, a, x, 23, -35309556<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5hh(a, b, c, d, x, 4, -1530992060<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5hh(d, a, b, c, x, 11, 1272893353<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5hh(c, d, a, b, x, 16, -155497632<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5hh(b, c, d, a, x, 23, -1094730640<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5hh(a, b, c, d, x, 4, 681279174<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5hh(d, a, b, c, x, 11, -358537222<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5hh(c, d, a, b, x, 16, -722521979<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5hh(b, c, d, a, x, 23, 76029189<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5hh(a, b, c, d, x, 4, -640364487<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5hh(d, a, b, c, x, 11, -421815835<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5hh(c, d, a, b, x, 16, 530742520<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5hh(b, c, d, a, x, 23, -995338651<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ii(a, b, c, d, x, 6, -198630844<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ii(d, a, b, c, x, 10, 1126891415<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ii(c, d, a, b, x, 15, -1416354905<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ii(b, c, d, a, x, 21, -57434055<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ii(a, b, c, d, x, 6, 1700485571<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ii(d, a, b, c, x, 10, -1894986606<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ii(c, d, a, b, x, 15, -1051523<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ii(b, c, d, a, x, 21, -2054922799<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ii(a, b, c, d, x, 6, 1873313359<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ii(d, a, b, c, x, 10, -30611744<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ii(c, d, a, b, x, 15, -1560198380<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ii(b, c, d, a, x, 21, 1309151649<span style="color: rgba(0, 0, 0, 1)">)
a </span>= md5ii(a, b, c, d, x, 6, -145523070<span style="color: rgba(0, 0, 0, 1)">)
d </span>= md5ii(d, a, b, c, x, 10, -1120210379<span style="color: rgba(0, 0, 0, 1)">)
c </span>= md5ii(c, d, a, b, x, 15, 718787259<span style="color: rgba(0, 0, 0, 1)">)
b </span>= md5ii(b, c, d, a, x, 21, -343485551<span style="color: rgba(0, 0, 0, 1)">)
a </span>=<span style="color: rgba(0, 0, 0, 1)"> safeAdd(a, olda)
b </span>=<span style="color: rgba(0, 0, 0, 1)"> safeAdd(b, oldb)
c </span>=<span style="color: rgba(0, 0, 0, 1)"> safeAdd(c, oldc)
d </span>=<span style="color: rgba(0, 0, 0, 1)"> safeAdd(d, oldd)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Convert an array of little-endian words to a string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> binl2rstr (input) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> i
</span><span style="color: rgba(0, 0, 255, 1)">var</span> output = ''
<span style="color: rgba(0, 0, 255, 1)">var</span> length32 = input.length * 32
<span style="color: rgba(0, 0, 255, 1)">for</span> (i = 0; i < length32; i += 8<span style="color: rgba(0, 0, 0, 1)">) {
output </span>+= String.fromCharCode((input >>> (i % 32)) & 0xff<span style="color: rgba(0, 0, 0, 1)">)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> output
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> rstr2binl (input) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> i
</span><span style="color: rgba(0, 0, 255, 1)">var</span> output =<span style="color: rgba(0, 0, 0, 1)"> []
output[(input.length </span>>> 2) - 1] =<span style="color: rgba(0, 0, 0, 1)"> undefined
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (i = 0; i < output.length; i += 1<span style="color: rgba(0, 0, 0, 1)">) {
output </span>= 0<span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> length8 = input.length * 8
<span style="color: rgba(0, 0, 255, 1)">for</span> (i = 0; i < length8; i += 8<span style="color: rgba(0, 0, 0, 1)">) {
output |= (input.charCodeAt(i / 8) & 0xff) << (i % 32<span style="color: rgba(0, 0, 0, 1)">)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> output
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Calculate the MD5 of a raw string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> rstrMD5 (s) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> binl2rstr(binlMD5(rstr2binl(s), s.length * 8<span style="color: rgba(0, 0, 0, 1)">))
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Calculate the HMAC-MD5, of a key and some data (raw strings)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> rstrHMACMD5 (key, data) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> i
</span><span style="color: rgba(0, 0, 255, 1)">var</span> bkey =<span style="color: rgba(0, 0, 0, 1)"> rstr2binl(key)
</span><span style="color: rgba(0, 0, 255, 1)">var</span> ipad =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 0, 255, 1)">var</span> opad =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> hash
ipad[</span>15] = opad =<span style="color: rgba(0, 0, 0, 1)"> undefined
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (bkey.length > 16<span style="color: rgba(0, 0, 0, 1)">) {
bkey </span>= binlMD5(bkey, key.length * 8<span style="color: rgba(0, 0, 0, 1)">)
}
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (i = 0; i < 16; i += 1<span style="color: rgba(0, 0, 0, 1)">) {
ipad </span>= bkey ^ 0x36363636<span style="color: rgba(0, 0, 0, 1)">
opad </span>= bkey ^ 0x5c5c5c5c<span style="color: rgba(0, 0, 0, 1)">
}
hash </span>= binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> binl2rstr(binlMD5(opad.concat(hash), 512 + 128<span style="color: rgba(0, 0, 0, 1)">))
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Convert a raw string to a hex string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> rstr2hex (input) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> hexTab = '0123456789abcdef'
<span style="color: rgba(0, 0, 255, 1)">var</span> output = ''
<span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> x
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> i
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (i = 0; i < input.length; i += 1<span style="color: rgba(0, 0, 0, 1)">) {
x </span>=<span style="color: rgba(0, 0, 0, 1)"> input.charCodeAt(i)
output </span>+= hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f<span style="color: rgba(0, 0, 0, 1)">)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> output
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Encode a string as utf-8
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> str2rstrUTF8 (input) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> unescape(encodeURIComponent(input))
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Take string arguments and return either raw or hex encoded strings
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> rawMD5 (s) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> rstrMD5(str2rstrUTF8(s))
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> hexMD5 (s) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> rstr2hex(rawMD5(s))
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> rawHMACMD5 (k, d) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> hexHMACMD5 (k, d) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> rstr2hex(rawHMACMD5(k, d))
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> md5 (string, key, raw) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">key) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">raw) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hexMD5(string)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> rawMD5(string)
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">raw) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hexHMACMD5(key, string)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> rawHMACMD5(key, string)
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">typeof</span> define === 'function' &&<span style="color: rgba(0, 0, 0, 1)"> define.amd) {
define(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> md5
})
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">typeof</span> module === 'object' &&<span style="color: rgba(0, 0, 0, 1)"> module.exports) {
module.exports </span>=<span style="color: rgba(0, 0, 0, 1)"> md5
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
$.md5 </span>=<span style="color: rgba(0, 0, 0, 1)"> md5
}
})(</span><span style="color: rgba(0, 0, 255, 1)">this</span>)</pre>
</div>
<h4 class="md-end-block md-heading"><span class="md-plain">附送app 端 拨打电话</span></h4>
<p class="md-end-block md-p md-focus"><span class="md-plain">小程序拨打电话就不多说了 </span></p>
<p class="md-end-block md-p"><span class="md-plain">app端 官方介绍: <span class="md-link md-pair-s">http://www.html5plus.org/doc/zh_cn/device.html#plus.device.dial</span></span></p>
<p class="md-end-block md-p"><span class="md-plain">直接真机调试,模拟器会失败</span></p>
<div class="cnblogs_code">
<pre>plus.device.dial(phone); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> phone 为要拨打的号码</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163743513-969691954.png" alt="" loading="lazy"></p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">uni-app 真机调试(选择自定义基座)</span></h4>
<p class="md-end-block md-p"><span class="md-plain">(标准基座)开发者设置的第三方SDK配置信息不会生效。</span></p>
<p class="md-end-block md-p"><span class="md-plain">(标准基座)安装到手机上app名字是“HBuilder”。支付不会生效</span></p>
<p class="md-end-block md-p"><span class="md-plain">(自定义基座)包名会变成你项目的名字,这时支付,分享等多会生效</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202105/2237618-20210522163803874-1031512564.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p"> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/14799192.html</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/14799192.html
頁:
[1]