设为首页 加入收藏

TOP

Android微信登录、分享、支付(四)
2017-10-13 10:37:02 】 浏览:6434
Tags:Android 登录 分享 支付
oid dataCallback(WeiXinInfo obj) { tvNickname.setText("昵称:"+obj.getNickname()); tvAge.setText("年龄:"+obj.getAge()); Log.i("ansen","头像地址:"+obj.getHeadimgurl()); } }); }

WeiXinToken跟WeiXinInfo这两个实体类就不贴代码了,WeiXinToken用来映射获取访问token接口返回的json。WeiXinInfo用来映射获取用户接口返回的json。

微信分享

分享有两种分享到朋友圈跟分享给好友,统一调用share方法。传入一个boolean类型来判断是否分享到朋友圈。

public void share(boolean friendsCircle){
    WXWebpageObject webpage = new WXWebpageObject();
    webpage.webpageUrl = "www.baidu.com";//分享url
    WXMediaMessage msg = new WXMediaMessage(webpage);
    msg.title = "分享标题";
    msg.description = "分享描述";
    msg.thumbData =getThumbData();//封面图片byte数组

    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = String.valueOf(System.currentTimeMillis());
    req.message = msg;
    req.scene = friendsCircle ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
    wxAPI.sendReq(req);
}

分享内容有很多格式,分享图片、分享视频、分享消息。我们这边就分享消息为例,也是分享比较常见的格式。首先new一个WXWebpageObject对象,设置标题、内容、打开链接、封面等。最后调用wxAPI的sendReq放松一个请求。

分享跟登录一样,都会回调WXEntryActivity,然后又把分享结果发送给MainActivity.onEventMainThread方法。

支付
支付首先需要请求我们自己的服务器,获取支付信息。获取成功之后调用pay方法。

public void pay(WeiXinPay weiXinPay){
    PayReq req = new PayReq();
    req.appId = Constant.WECHAT_APPID;//appid
    req.nonceStr=weiXinPay.getNoncestr();//随机字符串,不长于32位。推荐随机数生成算法
    req.packageva lue=weiXinPay.getPackage_value();//暂填写固定值Sign=WXPay
    req.sign=weiXinPay.getSign();//签名
    req.partnerId=weiXinPay.getPartnerid();//微信支付分配的商户号
    req.prepayId=weiXinPay.getPrepayid();//微信返回的支付交易会话ID
    req.timeStamp=weiXinPay.getTimestamp();//时间戳

    wxAPI.registerApp(Constant.WECHAT_APPID);
    wxAPI.sendReq(req);
}

weiXinPay的值应该是我们从自己服务器获取的,然后把返回信息封装到PayReq对象中,最后调用wxAPI的sendReq方法发起请求。

在wxapi目录下新增一个WXPayEntryActivity类,这个类跟WXEntryActivity同级,用来接收微信支付的回调信息。这个类继承自Activity,需要实现IWXAPIEventHandler接口。

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI wxAPI;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        wxAPI = WXAPIFactory.createWXAPI(this, Constant.WECHAT_APPID);
        wxAPI.handleIntent(getIntent(), this);
    }
    
    @Override
    protected void onNewIntent(Intent intent){
        super.onNewIntent(intent);
        setIntent(intent);
        wxAPI.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {}

    @Override
    public void onResp(BaseResp resp) {
        Log.i("ansen", "微信支付回调 返回错误码:"+resp.errCode+" 错误名称:"+resp.errStr);
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX){//微信支付
            WeiXin weiXin=new WeiXin(3,resp.errCode,"");
            EventBus.getDefault().post(weiXin);
        }
        finish();
    }
}

其他方法都是固定写法,在onResp中判断如果是微信登录,就封装一个WeiXin对象,然后发送EventBus请求。这样MainActivity的onEventMainThread就会接收到这个WeiXin对象。

WXPayEntryActivity记得在AndroidManifest.xml中注册。

<activity
    android:exported="true"
    android:name=".wxapi.WXPayEntryActivity"/>

项目结构图如下所示,从图中我们看到软件包名是com.ansen.shoenet。接收微信登录支付返回的Activity的包名必须是com.ansen.shoenet.wxapi。两个activity的名字也是固定写法。

project_structure

签名

微信登录分享支付都有一个签名验证,这个很麻烦,导致每次调试都需要重新签名。

首先用android studio生成一个正式的签名文件,签名文件是.jks结尾的,这个签名文

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇初学者Android studio安装 下一篇[Android FrameWork 6.0源码学习]..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目