时间:2022-08-06 19:18:01 | 来源:网站运营
时间:2022-08-06 19:18:01 来源:网站运营
新项目,不管是手机端还是 PC 端基本上都会有微信登录、微信支付,甚至还会做一个微信公众号。整个体系庞大,资料也千奇百怪。所以特地总结一篇微信开发的技巧和相应资料来帮助你提高开发效率。
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
连接中包含以下参数:let a = 'http://xuyuechao.top'// 编码let b = encodeURIComponent(a)// 解码decodeURIComponent(b)
这里需要注意别用 encodeURI 。他是不会对 ASCII 字母和数字进行编码的。// 用户同意授权redirect_uri?code=CODE&state=STATE// 用户不同意授权redirect_uri?state=STATE
实现这一步前端的使命基本上已经完成了,因为核心 code 到手剩下的就是后端的事情了,简单描述一下后续步骤: 1. 前端将 code 通过 ajax 传给后端 2. 后端通过 code, appid, appsecret 获取到用户的基本信息生成 token 传给前端作为登录凭证 3. 前端保存 token ,之后的请求携带 token 发送给后端即可<script>http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js</script>
var obj = new WxLogin({ self_redirect:true, id:"login_container", appid: "", scope: "", redirect_uri: "", state: "", style: "", href: ""});
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
只获取用户的 openid 不需要用户授权的静默链接 scope=snsapi_base// 用户同意授权redirect_uri?code=CODE&state=STATE// 用户不同意授权redirect_uri?state=STATE
BrowserInfo = { isAndroid: Boolean(navigator.userAgent.match(/android/ig)), isIphone: Boolean(navigator.userAgent.match(/iphone|ipod/ig)), isIpad: Boolean(navigator.userAgent.match(/ipad/ig)), isWeixin: Boolean(navigator.userAgent.match(/MicroMessenger/ig)), isAli: Boolean(navigator.userAgent.match(/AlipayClient/ig)), isPhone: Boolean(/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent))}
好了开始介绍支付步骤 1. 判断是否是手机端微信内浏览器,是接着往下执行。不是按照产品制定的规则进行操作 2. 从后端哪里获取微信支付需要的相关参数。参数可以看下文步骤四中提供的代码 3. 在合适的位置执行 onBridgeReady 方法,这个方法存在的一个问题是你调用的时候他不一定初始化了因此需要判断一下是否初始化,方法如下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();}
function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入 "timeStamp":"1395712654", //时间戳,自1970年以来的秒数 "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信签名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 使用以上方式判断前端返回,微信团队郑重提示: //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 } }); }
整个支付流程到此结束,难点主要是 paySign 的签名方式,但是这一步是放在后端的,所以前端要实现这种支付方式还是异常简单的。在 Java 中 package 这个参数往往会给你用别的名字,因为 package 在 java 中是一个关键字,所以后端没法直接给你返回正好符合格式的对象,这点有点不友好但也不要怪后端哦。 相关文档链接地址: 文档地址// 注意这个是带有版本号的,最好通过下面提供的文章链接用最新的链接地址<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 jsApiList: [] // 必填,需要使用的JS接口列表});
wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。});
wx.chooseWXPay({ timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: '', // 支付签名随机串,不长于 32 位 package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=/*/*/*) signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: '', // 支付签名 success: function (res) { // 支付成功后的回调函数 }});
关键词:技巧,总结