第三方接微信登陸,分享,支付的一些坑(1)
最近接了公司遺漏專案,另一個安卓走了,接過他留下的bug,有點辛苦
主要就在這裡講講接微信的一些問題,花費了我好久,主要出現在登陸部分和支付返回的JSON資料解析,以及分享純圖片時的一些問題。
那首先就是去微信公眾平臺註冊,目前好像只支援企業註冊,而且需要支付300元的費用,有點坑
之後你會得到一個APP ID和一個APPSecret 。APPID會在管理中心可以看到,APPSecret就需要你儲存好,當然你也可以到時候要接介面的時候選擇重置
之後下面是你已經獲得的一些許可權
之後是開發資訊,這裡面會涉及到一個應用簽名,這個簽名是可以更改的,但是一般為正式版簽名,而在模擬機上執行時一般是測試版簽名,也就是debug簽名
之後你就可以開始用微信的功能了。
首先你需要在gradle中匯入包
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
之後因為註冊時應用簽名選擇的是正式版簽名,在模擬機測試時比較麻煩,所以你需要把測試簽名也轉換成正式簽名,同樣也是在gradle:app中的android{}中進行更改
這些都是要寫的,只是我發正式版了所以把它註釋了。上面分別是正式簽名的密碼啊別名之類的,最後一個是絕對路徑
1.微信登陸
在接微信登陸的時候,是我比較難以理解的地方。網上查詢資料發現拉出授權頁只需要4行程式碼就可以了,但在我專案裡面就一直拉不出授權頁。在最後正式版測試的時候換了個手機,授權頁就出來了。
首先在登陸頁面的onCreate中註冊api
這之中的APP_ID你可以寫在一個存放常量的類中,方便呼叫
之後在你登陸頁的微信圖示的點選事件中加入拉起授權的方法
就是這簡單的4行程式碼
scope後面的是固定形式,不能更改
state後面的隨便自己填寫。
這樣就能拉起授權頁了。
PS:當你授權之後再次登陸,或者刪除應用再跑起來再登陸都有可能無法拉起授權,而直接進入授權之後的回撥。我就在這裡疑惑了很久,不知道為什麼拉不起來,疑惑了半天,後來索性就不管,反而好了。
之後就是授權確定之後的回撥
你需要在包目錄下建立一個wxapi資料夾,然後建立一個WXEntryActivity類,這些都要一模一樣,不能更改
這個WXEntryActivity類就是微信授權登陸之後的回撥處理
下面的WXPayEntryActivity類是用於之後的微信支付的
首先是註冊
之後在OnResp中進行微信回撥處理
public void onResp(BaseResp baseResp) { switch (baseResp.getType()) { case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: finish(); break; case BaseResp.ErrCode.ERR_USER_CANCEL: Toast.makeText(WXEntryActivity.this, "使用者已取消", Toast.LENGTH_SHORT).show(); finish(); break; } break; case ConstantsAPI.COMMAND_SENDAUTH: switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: SendAuth.Resp baseResp1 = (SendAuth.Resp) baseResp; String code = baseResp1.code; // sign(code); Map<String, String> parmsMap = new HashMap<>(); parmsMap.put("code", code); OkHttpManger.getInstance().getAsync(Constant.URL + "WxLogin", new OKHttpUICallback.ResultCallback<AppBack>() { @Override public void onSuccess(AppBack appBack) { if (appBack.isSuccess()) { } } }, parmsMap); break; case BaseResp.ErrCode.ERR_AUTH_DENIED:// Lg.e("使用者拒絕授權"); finish(); break; case BaseResp.ErrCode.ERR_USER_CANCEL:// Lg.e("使用者取消"); finish(); break; case BaseResp.ErrCode.ERR_UNSUPPORT:// Lg.e("不支援"); finish(); break; default:Log.e("mm","errCode: " + baseResp.errCode); finish(); break; } break; } }
case ConstantsAPI.COMMAND_SENDAUTH: switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: SendAuth.Resp baseResp1 = (SendAuth.Resp) baseResp; String code = baseResp1.code;
這個是授權之後會給你一個code,你需要通過這個code和之前申請的APPSecret來獲取一個access_token。因為我這裡是後臺已經寫好了直接傳一個code就可以了,具體的可看微信開發平臺資源中心
之後在通過獲取的access_token來獲取授權
大致的接微信登入就是這樣,有錯勿噴,留言交流。