1.准备工作

  1. 在微信开放平台注册好账号,和获得WX_AppID。

  2. 添加依赖 : api ‘com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’

  3. 在BaseApplication里注册微信登录

    wxapi = WXAPIFactory.createWXAPI(this, Configure.WX_AppID, false);
    wxapi.registerApp(Configure.WX_AppID);

  4. 在清单文件里添加

        <activity   微信登录和分享的回调android:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar" /><activity  微信支付的回调android:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop" />
    

2.微信登录和分享的实现类

public class WXEntryActivity extends FragmentActivity implements IWXAPIEventHandler {private static final int RETURN_MSG_TYPE_LOGIN = 1;private static final int RETURN_MSG_TYPE_SHARE = 2;private OkHttpClient okHttpClient;private boolean isShareMoney = false;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//如果没回调onResp,八成是这句没有写BaseApplication.getWxApi().handleIntent(getIntent(), this);}/*** 微信发送请求到第三方应用时,会回调到该方法** @param baseReq*/@Overridepublic void onReq(BaseReq baseReq) {}/*** 接收从小程序跳转到app的数据,并进行处理** @param showReq*/private void goToShowMsg(ShowMessageFromWX.Req showReq) {}/*** 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法* app发送消息给微信,处理返回消息的回调** @param baseResp*/@Overridepublic void onResp(BaseResp baseResp) {switch (baseResp.errCode) {case BaseResp.ErrCode.ERR_AUTH_DENIED:finish();break;case BaseResp.ErrCode.ERR_USER_CANCEL:finish();if (RETURN_MSG_TYPE_SHARE == baseResp.getType()) {ToastUtils.showToast("分享失败");} else {ToastUtils.showToast("登录失败");}break;case BaseResp.ErrCode.ERR_OK:switch (baseResp.getType()) {case RETURN_MSG_TYPE_LOGIN:finish();//拿到了微信返回的code,立马再去请求access_tokenString code = ((SendAuth.Resp) baseResp).code;//通过code获取用户个人信息(UnionID机制)getWxUnionID(code);break;case RETURN_MSG_TYPE_SHARE:String transaction = baseResp.transaction;if (transaction != null && Configure.SHARE_MONEY1.equals(transaction)) {ShareMoneyDialog.initInstance(this).show(getFragmentManager(), "WXEntryActivity");}else if (transaction != null && Configure.SHARE_MONEY2.equals(transaction)) {ShareMoneyDialog.initInstance(this).show(getFragmentManager(), "WXEntryActivity");}else if (transaction != null && "miniProgram".equals(transaction)) {ToastUtils.showToast("分享小程序成功");finish();} else {ToastUtils.showToast("分享成功");finish();}break;}break;default:finish();break;}}/*** 获取用户个人信息(UnionID机制)** @param code*/private void getWxUnionID(String code) {ToastUtils.showLoadDialog("连接微信中...");String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + Configure.WX_AppID + "&secret=" + Configure.WX_AppSecret + "&code=" + code + "&grant_type=authorization_code";okHttpClient = new OkHttpClient();Request request = new Request.Builder().get().url(url).build();okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {ToastUtils.closeLoadDialog();ToastUtils.showToast(e.getMessage());}@Overridepublic void onResponse(Call call, Response response) throws IOException {ToastUtils.closeLoadDialog();String result = response.body().string();JSONObject jsonObject = null;try {jsonObject = new JSONObject(result);String unionid = (String) jsonObject.get("unionid");// TODO: 2018/5/15 需要调用检测unionidWXLoginO(unionid);} catch (JSONException e) {e.printStackTrace();}if (result == null) {return;}}});}/*** 运营商微信登录** @param unionid*/private void WXLoginO(final String unionid) {ToastUtils.showLoadDialog("微信登录...");ApiService.checkUnionId(unionid).subscribe(new CallBack<LoginEntity>() {@Overrideprotected void errorBody(String code, String message, String result) {ToastUtils.closeLoadDialog();if ("2".equals(code)) {//跳转到注册
//                    ACache.getAsString(AcacheKey.UNIONID);RouterUtils.openPage(RouterPath.REGISTER_PAGE, "unionid", unionid);return;}if ("3".equals(code)) {ToastUtils.showToast("您已经是师傅了,不能注册运营商");} else {ToastUtils.showToast(message);}}@Overrideprotected void requestBody(LoginEntity data, String message) {ToastUtils.closeLoadDialog();//存储厂商IDPreferencesUtils.putString(AcacheKey.MANUFACTUREID, data.getManufacturerId());PreferencesUtils.putString(AcacheKey.SESSIONID, data.getSessionId());PreferencesUtils.putString(AcacheKey.USERID, data.getUserId());PreferencesUtils.putString(AcacheKey.USER_VIP, data.getPayStatus());JPushInterface.setAlias(BaseApplication.getCurrentActivity(), data.getUserId(), new TagAliasCallback() {@Overridepublic void gotResult(int i, String s, Set<String> set) {}});String easemobUserName = data.getEasemobUserName();String easemobPassWord = data.getEasemobPassWord();//环信登陆if (easemobUserName != null && easemobPassWord != null) {
//                    ToastUtils.showLoadDialog("信息初始化中...");HXLoginUtils.hxLogin(easemobUserName, easemobPassWord);} else {JPushInterface.resumePush(BaseApplication.getInstance());RouterUtils.openPage(RouterPath.MAIN_OPERATOR);}}});}
}

3.微信支付的实现类

public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler {@Overrideprotected int createView() {return R.layout.activity_wxpay_entry;}@Overrideprotected void initData() {//如果没回调onResp,八成是这句没有写BaseApplication.getWxApi().handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp resp) {/*** 结果码参考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5*/if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {int code = resp.errCode;switch (code) {case 0:ToastUtils.showToast("支付成功");PayResp myResp = (PayResp) resp;String transaction = myResp.extData;if (transaction != null && Configure.BUY_SUCCESS1.equals(transaction)) {//购买短信成功EventbusUtils.sendEvent(new Event(EventC.UPDATE_BUY_MSG_INFO));}if (transaction != null && Configure.BUY_SUCCESS2.equals(transaction)) {//购买会员成功EventbusUtils.sendEvent(new Event(EventC.UPDATE_BUY_VIP_INFO));PreferencesUtils.putString(AcacheKey.USER_VIP, "3");}finish();break;case -1:finish();// 支付失败 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等ToastUtils.showToast("支付失败");break;case -2:finish();ToastUtils.showToast("支付取消");break;}}}
}

4.微信分享的工具类

public class ShareFriendsUtils {private static WXMediaMessage wxMediaMessage;/*** 把url分享到朋友圈** @param mContext* @param url* @param title* @param imgUrl*/public static void shareToFriends(Context mContext, String url, String title, String imgUrl, final String myTransaction) {if (!BaseApplication.getWxApi().isWXAppInstalled()) {ToastUtils.showToast("您还没安装微信应用");return;}//初始化WXWebpageObject对象,填写urlWXWebpageObject wxWebpageObject = new WXWebpageObject();wxWebpageObject.webpageUrl = url;//用WXWebpageObject初始化一个WXMediaMessage的对象,填写标题和描述、以及小图标wxMediaMessage = new WXMediaMessage(wxWebpageObject);wxMediaMessage.title = title;Glide.with(mContext).load(imgUrl).into(new SimpleTarget<Drawable>() {@Overridepublic void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {Bitmap bitmap = ImagUtils.drawableToBitmap(resource);//设置缩略图Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 80, 80, true);wxMediaMessage.setThumbImage(scaledBitmap);//构造一个reqSendMessageToWX.Req req = new SendMessageToWX.Req();//transaction字段唯一req.transaction = myTransaction;req.message = wxMediaMessage;//分享到朋友圈req.scene = SendMessageToWX.Req.WXSceneTimeline;//调用微信接口分享BaseApplication.getWxApi().sendReq(req);}});}/*** 分享图片到朋友圈** @param bitmap*/public static void shareImgeToFriends(Bitmap bitmap) {if (!BaseApplication.getWxApi().isWXAppInstalled()) {ToastUtils.showToast("您还没安装微信应用");return;}if (bitmap==null) {return;}//初始化WXWXImageObject对象和WXMediaMessage对象WXImageObject wxImageObject = new WXImageObject(bitmap);WXMediaMessage wxMediaMessage = new WXMediaMessage();wxMediaMessage.mediaObject = wxImageObject;//设置缩略图Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 50, 100, true);wxMediaMessage.setThumbImage(scaledBitmap);//构造一个reqSendMessageToWX.Req req = new SendMessageToWX.Req();//transaction字段唯一req.transaction = String.valueOf(System.currentTimeMillis());req.message = wxMediaMessage;//分享到朋友圈req.scene = SendMessageToWX.Req.WXSceneTimeline;//调用微信接口分享BaseApplication.getWxApi().sendReq(req);}/*** 分享图片给朋友** @param bitmap*/public static void shareImgeToMyFriend(Bitmap bitmap) {if (!BaseApplication.getWxApi().isWXAppInstalled()) {ToastUtils.showToast("您还没安装微信应用");return;}if (bitmap==null) {return;}//初始化WXWXImageObject对象和WXMediaMessage对象WXImageObject wxImageObject = new WXImageObject(bitmap);WXMediaMessage wxMediaMessage = new WXMediaMessage();wxMediaMessage.mediaObject = wxImageObject;//设置缩略图Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 50, 100, true);wxMediaMessage.setThumbImage(scaledBitmap);//构造一个reqSendMessageToWX.Req req = new SendMessageToWX.Req();//transaction字段唯一req.transaction = String.valueOf(System.currentTimeMillis());req.message = wxMediaMessage;//分享给我的朋友req.scene = SendMessageToWX.Req.WXSceneSession;//调用微信接口分享BaseApplication.getWxApi().sendReq(req);}/*** 小程序类型分享*/public static void shareProgramObject(String title,String path){if (!BaseApplication.getWxApi().isWXAppInstalled()) {ToastUtils.showToast("您还没安装微信应用");return;}WXMiniProgramObject miniProgramObj = new WXMiniProgramObject();miniProgramObj.webpageUrl = "http://www.hellokeeper.com/lsf/client-download.html"; // 兼容低版本的网页链接miniProgramObj.miniprogramType = WXMiniProgramObject.MINIPTOGRAM_TYPE_RELEASE;// 正式版:0,测试版:1,体验版:2miniProgramObj.userName = "gh_ee782e862a53";     // 小程序原始idminiProgramObj.path = path;            //小程序页面路径WXMediaMessage msg = new WXMediaMessage(miniProgramObj);msg.title = title;                    // 小程序消息titlemsg.description = "小程序消息Desc";               // 小程序消息descBitmap bitmap = BitmapFactory.decodeResource(BaseApplication.getCurrentActivity().getResources(), R.mipmap.mini_banner1);//设置缩略图Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 833, 666, true);msg.setThumbImage(scaledBitmap);                     // 小程序消息封面图片,小于128kSendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = ("miniProgram");req.message = msg;req.scene = SendMessageToWX.Req.WXSceneSession;  // 目前只支持会话BaseApplication.getWxApi().sendReq(req);}
}

5.微信支付的工具类

public class WXpayUtils {/***调起微信支付的方法**/public static void toWXPay( final String partnerId, final String prepayId, final String nonceStr,final String timeStamp, final String sign, final String packageValue, final String tag) {if (! BaseApplication.getWxApi().isWXAppInstalled()) {ToastUtils.showToast("你没有安装微信");return;}//一定注意要放在子线程Runnable payRunnable = new Runnable() {@Overridepublic void run() {PayReq request = new PayReq(); //调起微信的对象//这几个参数的值,正是上面我们说的统一下单接口后返回来的字段,我们对应填上去即可request.appId = Configure.WX_AppID;request.partnerId = partnerId;request.prepayId = prepayId;request.packageValue = packageValue;request.nonceStr = nonceStr;request.timeStamp = timeStamp;request.sign = sign;//设置标识request.extData = tag;BaseApplication.getWxApi().sendReq(request);//发送调起微信的请求}};Thread payThread = new Thread(payRunnable);payThread.start();}
}

安卓微信登录,分享,支付相关推荐

  1. OC 技术 (不需要UniversalLink)第三方微信(登录,分享,支付)详解(手动集成)(视频教学)

    一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹.靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希 ...

  2. OC 技术 (需要UniversalLink)第三方微信(登录,分享,支付)详解(手动集成)(视频教学)

    一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹.靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希 ...

  3. 【APICloud系列|38】 微信登录分享、QQ登录分享实现方法

    对微信登录分享.QQ登录分享进行一个流程性的讲解.在微信分享经常是分享不成功或者图片不显示,主要问题是图片过大或者是没有本地化. 1.流程:使用auth进行授权--->getToken获取用户信 ...

  4. Android绕过微信包名限制对接微信登录和支付

    Android绕过微信包名限制对接微信登录和支付 前言 最终效果 原理 代码 通过 APT 生成 WXEntryActivity 文件 对接微信SDK End 前言 Android对接微信登录和支付几 ...

  5. flutter微信登录与支付(二)

    flutter 微信支付github地址: https://github.com/OpenFlutter/fluwx 上一篇我们集成了微信登录功能 flutter微信登录与支付(一) 链接:https ...

  6. 最新修复H5抑云熬夜打卡定制版对接微信登录+免签支付源码+

    最新修复H5抑云熬夜打卡定制版对接微信登录+免签支付源码+搭建视频教程 [别站亲测源码]11月最新H5早起打卡网抑云熬夜打卡定制版对接微信登录/免签 支付 源码全修复完美版本/搭建视频教程 全新的早起 ...

  7. 安卓微信修改分享来源,小尾巴,支持qq 头条 uc 浏览器

    安卓微信修改分享来源,小尾巴,支持qq 头条 uc 浏览器   需要联系QQ 2479092628 这样可以提高分享点击率,也可以防止微信检测,做到防封效果 部分效果展示 跨端应用也可使用, 有成熟的 ...

  8. 微信登录分享不回调WXEntryActivity

    微信登录分享不回调WXEntryActivity 先讲讲我的经历吧,公司要在老的项目的基础上新开一个项目,新的项目也要接入微信分享登录.我就很开心的创建了项目, 随便命名了包名,后面公司修改了包名,我 ...

  9. 网抑云熬夜打卡源码+微信登录+免签支付+今日打卡统计

    简介: 全新的早起/熬夜打卡定制版,和本站之前发的那个早起区块链源码完全不是一个东西,别搞混了.这个对接微信登录,支持退款原路返回,推广.奖励都是自动发放,带有排行榜,邀请榜.财富榜.打卡毅力榜等等. ...

最新文章

  1. Solaris10之SVM简析
  2. 虚拟摄像头 安卓版_林俊杰 ft. M.E.,联同视效大厂数字王国加码虚拟偶像
  3. TableView/CollectionView 滑动顶部效果优化
  4. UVa12124 - Assemble(二分查找)
  5. LCA 在线倍增法 求最近公共祖先
  6. python中str和int区别_Python如何比较string和int?
  7. 关于精益和敏捷的对话
  8. MFC中关于虚函数的一些问题
  9. C#学习笔记-Windows窗体自定义初始位置
  10. 二维码图像去噪文献调研(1)--Real Image Denoising with Feature Attention
  11. 省钱小贴士(ECS):教你如何每年省出8w+ 块
  12. 【转】比较page、request、session、application的使用范围
  13. [翻译 EF Core in Action] 1.5 关于NoSql
  14. div+css总结—FF下div不设置…
  15. js/json 数组的操作
  16. 零信任时代企业如何提升权限的安全?从浏览器小程序说起
  17. IBM系统分析——领域建模
  18. 【很简单的教程】如何提取模型每层的特征【以ResNet为例】
  19. 怎么彻底关闭wps热点 wps热点弹窗怎么永久关闭
  20. Spring Kafka Transaction

热门文章

  1. 计算机网络概念——软考
  2. vue项目中设置网站图标
  3. Can't find X includes 和Can't find X libraries
  4. Flutter开发之——AlertDialog
  5. golang Gorm框架
  6. SQL防注入正则表达式
  7. 穿越派·派盘+Joplin=私有云盘
  8. Python有趣的微信好友数据分析
  9. linux中kill命令默认发出的信号,linux中的kill命令的详细解释
  10. android 变量为空,android-返回应用程序时,静态变量为null