Android 微信第三方绑定登录详解

赢第三方微信登录跟微信支付差别不是很大,下面一一为大家分享一下,欢迎吐槽指正。
接入微信的支付要第一步添加微信支付官方的包libammsdk.jar

一。配置文件Androidmanifest

        <activity
            android:name=".teacher.ui.Activity"
            android:label="@string/app_name"
            android:exported="true"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="wx690b9cf56a4ec056"/> //写入你的appid
            </intent-filter>
        </activity>

二。调起微信登录

Activity里面
在onCreate里面初始化IWXAPI

    public static final String APP_ID = "wx690b9cf56a4ec056";
    private IWXAPI api;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_affirm_order);
        api = WXAPIFactory.createWXAPI(AffirmOrderActivity.this, APP_ID, true);
        api.registerApp(APP_ID);
    }

发起登录代码
你没有看错,就只有这么点代码,里面需要的值你们自己的后台会返回的,拿过来塞到里面就好

          Final SendAuth.Req req = new SendAuth.Req();
          req.scope = "snsapi_userinfo";
          req.state = "wechat_sdk_demo_test";
          api.sendReq(req);
          //以上代码就是发起微信登录的方法

三。登录结果的处理
请求成功后,可拉起微信的授权登录页面。用户点击“确认登录”后,SDK通过SendAuth的Resp返回数据给调用方(即app),此时WXEntryActivity中的public void onResp(BaseResp resp)方法被调用(微信、朋友圈分享成功后,此方法同样会被调用),微信登录的返回值说明如下。这里app可以做相关的处理,见WXEntryActivity.java文件中的处理,取code为下一步获取access_token和openid等信息做准备。此处获取code的方法
这里面分为两步
1,微信提供的登录结果的类叫WXEntryActivity,
微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:你的包名+.wxapi.WXEntryActivity.java
如下;
“`
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{

private IWXAPI api;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView tv = new TextView(this);
    tv.setText("支付结果");
    setContentView(tv);
    api = WXAPIFactory.createWXAPI(this, AffirmOrderActivity.APP_ID);
    api.handleIntent(getIntent(), this);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    api.handleIntent(intent, this);
}

public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) resp).code; //即为所需的code
break;
}
}
}

然后通过code获取access_token

获取上一步中的code后,调用以下接口获取access_token,官方指出用Get方式请求。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求参数说明:
appid:应用唯一标识,在微信开放平台提交应用审核通过后获得。
secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得。
code:填写第一步获取的code参数。
grant_type:填authorization_code。
返回说明
正确的返回:
{
“access_token”:”ACCESS_TOKEN”,
“expires_in”:7200,
“refresh_token”:”REFRESH_TOKEN”,
“openid”:”OPENID”,
“scope”:”SCOPE”
}
返回参数说明:
access_token:接口调用凭证。
expires_in:access_token接口调用凭证超时时间,单位(秒)。
refresh_token:用户刷新access_token。
openid:授权用户唯一标识。
scope:用户授权的作用域,使用逗号(,)分隔
注意:
1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

建议将Appsecret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。

刷新access_token有效期

access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:

  1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;

  2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。

refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

请求方法

获取第一步的code后,请求以下链接进行refresh_token:

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

然后根据自己的需求选择调用以下接口
对于接口作用域(scope),能调用的接口有以下:

/sns/userinfo 获取用户个人信息
/sns/auth 检查access_token有效性
需要更多的接口到微信开放平台查看 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN

snsapi_base /sns/oauth2/access_token 通过code换取access_token、refresh_token和已授权scope
/sns/oauth2/refresh_token 刷新或续期access_token使用
/sns/auth 检查access_token有效性
snsapi_userinfo /sns/userinfo 获取用户个人信息

记得,在配置文件Androidmanifest注册WXPayEntryActivity

 <activity
        android:name="(你的包名).wxapi.WXEntryActivity "
        android:exported="true"//这一句一定不能少
        android:launchMode="singleTop" />      

结束语:微信的登录很简单,建议看懂微信的官方文档再动手搬砖会省事很多。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值