微信登錄PC 端“常規(guī)”微" />
時(shí)間:2022-08-06 19:18:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2022-08-06 19:18:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
新項(xiàng)目,不管是手機(jī)端還是 PC 端基本上都會(huì)有微信登錄、微信支付,甚至還會(huì)做一個(gè)微信公眾號(hào)。整個(gè)體系龐大,資料也千奇百怪。所以特地總結(jié)一篇微信開(kāi)發(fā)的技巧和相應(yīng)資料來(lái)幫助你提高開(kāi)發(fā)效率。
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
連接中包含以下參數(shù):let a = 'http://xuyuechao.top'// 編碼let b = encodeURIComponent(a)// 解碼decodeURIComponent(b)
這里需要注意別用 encodeURI 。他是不會(huì)對(duì) ASCII 字母和數(shù)字進(jìn)行編碼的。// 用戶同意授權(quán)redirect_uri?code=CODE&state=STATE// 用戶不同意授權(quán)redirect_uri?state=STATE
實(shí)現(xiàn)這一步前端的使命基本上已經(jīng)完成了,因?yàn)楹诵?code 到手剩下的就是后端的事情了,簡(jiǎn)單描述一下后續(xù)步驟: 1. 前端將 code 通過(guò) ajax 傳給后端 2. 后端通過(guò) code, appid, appsecret 獲取到用戶的基本信息生成 token 傳給前端作為登錄憑證 3. 前端保存 token ,之后的請(qǐng)求攜帶 token 發(fā)送給后端即可<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 不需要用戶授權(quán)的靜默鏈接 scope=snsapi_base// 用戶同意授權(quán)redirect_uri?code=CODE&state=STATE// 用戶不同意授權(quán)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))}
好了開(kāi)始介紹支付步驟 1. 判斷是否是手機(jī)端微信內(nèi)瀏覽器,是接著往下執(zhí)行。不是按照產(chǎn)品制定的規(guī)則進(jìn)行操作 2. 從后端哪里獲取微信支付需要的相關(guān)參數(shù)。參數(shù)可以看下文步驟四中提供的代碼 3. 在合適的位置執(zhí)行 onBridgeReady 方法,這個(gè)方法存在的一個(gè)問(wèn)題是你調(diào)用的時(shí)候他不一定初始化了因此需要判斷一下是否初始化,方法如下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", //公眾號(hào)名稱,由商戶傳入 "timeStamp":"1395712654", //時(shí)間戳,自1970年以來(lái)的秒數(shù) "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信簽名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示: //res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。 } }); }
整個(gè)支付流程到此結(jié)束,難點(diǎn)主要是 paySign 的簽名方式,但是這一步是放在后端的,所以前端要實(shí)現(xiàn)這種支付方式還是異常簡(jiǎn)單的。在 Java 中 package 這個(gè)參數(shù)往往會(huì)給你用別的名字,因?yàn)?package 在 java 中是一個(gè)關(guān)鍵字,所以后端沒(méi)法直接給你返回正好符合格式的對(duì)象,這點(diǎn)有點(diǎn)不友好但也不要怪后端哦。 相關(guān)文檔鏈接地址: 文檔地址// 注意這個(gè)是帶有版本號(hào)的,最好通過(guò)下面提供的文章鏈接用最新的鏈接地址<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
wx.config({ debug: true, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: '', // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: , // 必填,生成簽名的時(shí)間戳 nonceStr: '', // 必填,生成簽名的隨機(jī)串 signature: '',// 必填,簽名 jsApiList: [] // 必填,需要使用的JS接口列表});
wx.ready(function(){ // config信息驗(yàn)證后會(huì)執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個(gè)客戶端的異步操作,所以如果需要在頁(yè)面加載時(shí)就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來(lái)確保正確執(zhí)行。對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。});
wx.chooseWXPay({ timestamp: 0, // 支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫(xiě)。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫(xiě)其中的S字符 nonceStr: '', // 支付簽名隨機(jī)串,不長(zhǎng)于 32 位 package: '', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=/*/*/*) signType: '', // 簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5' paySign: '', // 支付簽名 success: function (res) { // 支付成功后的回調(diào)函數(shù) }});
關(guān)鍵詞:技巧,總結(jié)
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。