wap2app(五)-- 微信授權登錄以及踩過的坑

来源:https://www.cnblogs.com/wangxiaoling/archive/2018/11/14/9850717.html
-Advertisement-
Play Games

應用場景是:用Hbuilder打包app,在app中點擊微信授權登錄或者某一操作,調起微信授權登錄,用戶授權後拿到用戶信息。 一、登錄插件配置 先配置微信登錄參數 appid和appsecret,在manifest.json 文件中選擇SDK配置,登錄鑒權 勾選微信登錄,填入在開放平臺申請的app參 ...


應用場景是:用Hbuilder打包app,在app中點擊微信授權登錄或者某一操作,調起微信授權登錄,用戶授權後拿到用戶信息。

一、登錄插件配置

先配置微信登錄參數 appid和appsecret,在manifest.json 文件中選擇SDK配置,登錄鑒權  勾選微信登錄,填入在開放平臺申請的app參數。

在manifest.json 文件中選擇 源碼視圖,找到“OAuth”,配置為

"OAuth" : {
    "description" : "登錄授權"
},

 官方相關查閱地址:http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/192

二、在網站中添加授權登錄代碼

我的需求是:在網站中點擊微信授權登錄,判斷是否來自wap2app,如果來自wap2app則調起微信授權登錄。在網站中加入如下代碼:

1.點擊微信授權登錄,獲取微信授權服務:

var auths=null;
$("body").on("click",".loginBtn",function(){
    // 微信授權登錄
    if(navigator.userAgent.indexOf("Html5Plus") > -1){
        plus.oauth.getServices( function(services){
            auths = services;
            authLogin();
        }, function(e){
            alert("獲取分享服務列表失敗:"+e.message+" - "+e.code);
        } );
    }

})

2.登錄認證

//登錄
function authLogin(){
    var s = auths[0];
    if ( !s.authResult ) {
        s.login( function(e){
            // 獲取登錄操作結果
            var result = e.target.authResult;
            alert( "登錄認證成功:"+JSON.stringify(result) );
            authUserInfo()
        }, function(e){
            alert("登錄認證失敗!");
        }, {} );
    }
}

3.獲取用戶信息

// 獲取登錄用戶信息操作
function authUserInfo(){
    var s = auths[0];
    if ( !s.authResult ) {
        alert("未登錄授權!");
    } else {
        s.getUserInfo( function(e){
            alert( "獲取用戶信息成功:"+JSON.stringify(s.userInfo) );

            //拿到用戶信息,進行相關處理,ajax傳用戶數據到伺服器等
            var prame = JSON.stringify(s.userInfo);

        }, function(e){
            alert( "獲取用戶信息失敗:"+e.message+" - "+e.code );
        } );
    }
}

4.退出登錄

function authLogout(){
    for ( var i in auths ) {
        var s = auths[i];
        if ( s.authResult ) {
            s.logout(function(e){
                alert( "註銷登錄認證成功!" );
            }, function(e){
                alert( "註銷登錄認證失敗!" );
            });
        }
    }
}

 官方相關查閱地址:http://www.html5plus.org/doc/zh_cn/oauth.html

在hbuilder中運行會發現可以調起微信授權,且可以獲取用戶信息,如下圖:

點擊確認登錄後,返回用戶信息和unionid等信息,如下圖:

但是打包後會一直提示登錄認證失敗,無法授權,也沒有調起微信授權的頁面,主要有以下兩個錯誤:

一、報錯 code = -2,用戶取消

解決辦法:研究了很久,發現主要是兩個原因:1.使用了網站的appid和appsecret,應該是申請的app應用的appid和appsecret,2.應該使用自有證書

依舊還是報錯 code = -2,檢查是否線上上運行,即在開放平臺綁定的功能變數名稱必須與該項目的功能變數名稱一致,即我們常說的,微信分享、微信登錄必須線上上測試

二、報錯 code = -100如下圖

問題1:檢查應用簽名是否錯誤

問題2:檢查開放平臺的配置授權回調功能變數名稱是否配置,且是否配置正確(www.baidu.com格式)

解決辦法:

微信開放平臺移動應用中的應用簽名錯誤,若申請應用時開發信息中數據填寫錯誤,直接修改,已審核通過的不需要重寫審核。

應用簽名的要求:

1.MD5格式 2.簽名為小寫;3.去除冒號。都為必須條件。

在Hbuilder中配置時,簽名也必須是修改後的格式(md5、小寫、去冒號)。

Hbuilder中配置應用簽名時,打開manifest.json文件,打開“源碼視圖”(基礎配置,圖標配置,啟動圖配置,SDK配置,模塊許可權配置中都是沒有應用簽名配置的,所以很容易遺漏修改它的值),找到 plus --> signature,修改signature的值為符合條件的值即可

 

以上打包之後,不在報錯,但是還有一個問題,在app中點擊微信授權後,除了首次會調起微信授權手動授權的界面,再次授權時直接就彈出了用戶信息,即直接執行了,缺少用戶在終端確認的請求授權過程

alert( "登錄認證成功:"+JSON.stringify(result) );

這是因為,授權的微信號只有首次授權時才會調起微信授權的頁面,當退出微信授權再次進入時,點擊授權會跳轉之後再跳回來,自動獲取到用戶信息。

打包app,微信授權登錄常遇到的問題總結

1.使用了網站的appid和appsecret,應該是申請的app應用的appid和appsecret

2.應該使用自有證書

3.微信開放平臺移動應用中的應用簽名錯誤,必須滿足3點:1.MD5格式 2.簽名為小寫;3.去除冒號。都為必須條件。

4.(網站或打包app)微信授權登錄,必須在開放平臺配置授權回調功能變數名稱,且必須是www形式的,如www.baidu.com,否則授權登錄一直報錯

5.開發微信分享、微信登錄等微信相關的功能,在開放平臺或者公眾平臺綁定的功能變數名稱必須與該項目的功能變數名稱一致,即我們常說的,微信分享、微信登錄必須線上上測試

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在調研關聯數據的一些東西,需要用到rdf資料庫,所以接觸了virtuoso資料庫。安裝的坑其實並不多,之前在windows 10上安過一次。這次在ubuntu 18.04上安裝一下,其他的linux發行版安裝的流程也差不多。 virtuoso資料庫的下載與使用 開源版本的virtuoso資料庫可 ...
  • 原創鏈接:https://www.cnblogs.com/junfly/articles/2798023.html SQL SERVER 基礎教程中關於伺服器登錄名、伺服器角色、資料庫用戶、資料庫角色、架構的關係。 我們要說的包括伺服器登錄名Server Login,伺服器角色Server Role ...
  • 摘要: 下文講述updatetext的功能及舉例說明 實驗環境:sql server 2008 R2 updatetext關鍵字功能及語法說明 updatetext功能說明: updatetext的功能為:更新當前的text,ntext,image欄位, 當我們可以使用updatetext更新列中的 ...
  • MySQL 屬於 關係型資料庫管理系統 (RDBMS),使用RDBMS時,最常見的系統結構就是 客戶端/伺服器類型 (C/S類型)這種結構。 指的是用來接收其他程式發出的請求,並對該請求進行相應處理的程式(軟體),或者是安裝了此類程式的設備(電腦)。在電腦上持續執行處理,並等待接收下一條請求。 ...
  • 現階段大數據如火如荼,很多人想要學習大數據,但是卻不瞭解大數據,也不知道該從哪開始學起的同學,希望這篇文章能夠幫到你們。 1. Linux基礎和JavaSE基礎【包含mysql】 這些是基本功,剛開始也不可能學的很精通,最起碼要對linux中的一些基本的命令混個臉熟,後面學習各種框架的時候都會用到, ...
  • 假設當前是第PageNo頁,每頁有PageSize條記錄,現在分別用Mysql、Oracle和SQL Server分頁查詢student表。 1、Mysql的分頁查詢: 理解:(Limit n,m) =>從第n行開始取m條記錄,n從0開始算。 2、Oracel的分頁查詢: 理解:假設pageNo = ...
  • ListView與RecyclerView在在app應用非常廣泛,相對於其他的view(button textview)來說比較複雜,接下來我將講一下創建的流程以及兩者的不同。 代碼來自《第一行代碼》 秋天到了,果園大豐收了,現在著急的事情,就是把水果收集好放進倉庫里。 ListView 1. 首先 ...
  • Android XBanner使用詳解 2018年03月14日 08:19:59 AND_Devil 閱讀數:910 Android XBanner使用詳解 2018年03月14日 08:19:59 AND_Devil 閱讀數:910 Android XBanner使用詳解 Android XBan ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...