1. 程式人生 > >第三方接微信登陸,分享,支付的一些坑(1)

第三方接微信登陸,分享,支付的一些坑(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來獲取授權


大致的接微信登入就是這樣,有錯勿噴,留言交流。