android分享支付经验分享

最近由于公司想弄一个新手推荐活动,因为是推荐活动,必须借用现在流行的社交软件进行各种分享,只要形式有微信分享到好友或者朋友圈、QQ分享给好友或者空间、微博分享和短信分享等。下面我就跟大家一起聊下在分享的过程中所遇到的各种坑。本文来自于自己的经验,不足的地方还请指正。首先说下我是怎么实现的,然后给大家说下实现过程中应该注意的。

##微信支付

1. 微信支付注册``` api = WXAPIFactory.createWXAPI(this, AppConfig.WEIXIN_PAY_ID, false);```  > 第二个参数是我们在微信开放平台申请的Pay_ID  > 第三个参数代表是否进行校验.2. 微信推荐我们从后台生成订单,然后再通过app调起微信进行支付,其实也可以App里面就生成订单,然后Appc里面进行支付。两种都是可行的,但是大多数App并不是简简单单的支付,可能还要数据库入库,或者进行一些其他的操作,通过后台生成订单就比较好,大家可以根据自己的需求,选择适合自己的。3. 当订单生成之后,我们需要拼接调起微信支付的请求PayReq: ```javaPayReq request = new PayReq(); request.appId = object.getString("appId"); request.partnerId = object.getString("partnerId"); request.prepayId = object.getString("prepayId"); request.packageValue = object.getString("package"); request.nonceStr = object.getString("nonceStr"); request.timeStamp = object.getString("timeStamp"); request.sign = object.getString("sign"); api.sendReq(request); ```  **通过api.sendReq(),我们就能调起微信进行支付啦。一般情况下还是比较容易调起 的,如果没反应,请检查自己的APP_ID,然后在检查一下自己的PayReq,然后在检查一下,是否添加了必须的权限。**  4. 微信成功调起,输入密码成功支付之后,如果我们想要知道微信支付的结果,就必须在应用包名下,新建一个wxapi的包,然后新建一个WXPayEntryActivity,重点注意包名和activity的名字不要写错,微信是通过包名加activity的名称通过反射跳转到该页面。这样还不够,需要实现微信定义的IWXAPIEventHandler,重写onResp和onReq,在onReq里面我们可以对app发送到微信的请求做些处理,在onResp我们可以接收到微信返回的结果。返回结果bean里面的errCode比较简单,0代表成功,-1代表失败,-2代表取消。这样还不够,还要调用iwxapi.handleIntent(getIntent(), this)在能正真的接收到微信返回的消息。如果没能成功的接收到微信返回的消息,依次检查包名activity名是否与规定的不符,检查是否在AndroidMianfest里面注册了activity,然后是否调用了iwxapi.handleIntent(getIntent(), this)。###以上就是微信支付的总结,主要注意1. 权限是否添加2. **wxapi和WXPayEntryActivity的包名是否正确**3. **在 WXPayEntryActivity里面是否调用了iwxapi.handleIntent(getIntent(), this)**## 微信分享1. 首先检测手机是否安装了微信,通过微信自定义的方法```javaIWXAPI api = WXAPIFactory.createWXAPI(context, AppConfig.WEIXIN_PAY_ID, false);  if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {        flag = true;    }```>api.isWXAppInstalled()返回微信是否安装>api.isWXAppSupportAPI()返回微信是否支持支付2. 在初始化了api之后,我们需要把应用注册到微信`api.registerApp(AppConfig.WEIXIN_PAY_ID);`3. 下面就是创建WXobject和wxMessage,说明文档上有具体的代码,分享文字,图片,音频等详细代码,我就不一一重述了,大家自己去微信开放平台查看代码。通过api.sendReq(req)我们就能调起微信分享的界面。4. 跟微信支付一样,我们 需要在wxapi包下面新建一个WXEntryActivity,并且实现IWXAPIEventHandler才能接收到是否分享成功。###如果没有分享成功,依次检查:1. **分享之前时候注册了应用到微信**```javaapi.registerApp(AppConfig.WEIXIN_PAY_ID);```2. **WXEntryActivity是否注册了**3. **是否添加了必要的权限**## QQ分享1. 首先导入必须的mta_sdk.jar和open_sdk.jar2. AndroidManifest里面添加3. Tencent是QQ的入口,需要实例化Tencent:`Tencent:mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());`4. 实现回调:IUiListener,QQ的所有操作都是通过这个回调的,如果要想接收到QQ的回调,还需要重写onActivityRes###如果没有分享成功,依次检查:1. **是否添加必要的权限**2. **是否在Manifest里面注册了必要的activity,重点注意的是,这里以Tencent 开头,后面的数字是自己申请的appkey,当初就是这里没有处理,导致QQ一直无法调起**3. **如果分享成功,但是不能接收到回调,检查是否重写了onActivityResult()**## 微博分享#####微博里面文档比较全,他涉及到的东西也非常多,我们移动app比较关注的是他的分享和登陆。 1. 导入jar包和so库 2. 在Manifest里面添加:  ```xml```      >这是微博自带的有个webview,当你手机没有安装微博的时候,可以通过H5实现分享和登陆。如果没有注册的话,当没安装微博客户端的时候,无法调起微博H5页面; 3. 实现IWeiboHandler.Response接口,用于接收微博分享的结果 4. 实例化IWeiboShareAPI、注册,处理微博分享 的结果:  ```java mWeiboShareAPI=WeiboShareSDK.createWeiboAPI(context.getApplicationContext(), AppConfig.WEIBO_APPID);        mWeiboShareAPI.registerApp(); mWeiboShareAPI.handleWeiboResponse(getIntent(), this);//处理微博分享的结果; ```###如果没有分享成功,一次检查:1. 因为微博审核比较严格,只有当审核通过之后才能分享成功,有可能并不是你的代码问题,而是审核没有通过,导致分享失败2. 在没有安装微博的情况下,不能跳到微博分享的H5,检查Manifest里面是否注册了微博的H5 webview;3. 添加必须的权限**下面分享我自己写的一个ShareUtils,里面实现了QQ,微信,微博分享,大家可以自行下载对照。```javaimport android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.widget.Toast;import com.sina.weibo.sdk.api.TextObject;import com.sina.weibo.sdk.api.WebpageObject;import com.sina.weibo.sdk.api.WeiboMessage;import com.sina.weibo.sdk.api.WeiboMultiMessage;import com.sina.weibo.sdk.api.share.IWeiboShareAPI;import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;import com.sina.weibo.sdk.api.share.WeiboShareSDK;import com.sina.weibo.sdk.auth.AuthInfo;import com.sina.weibo.sdk.auth.Oauth2AccessToken;import com.sina.weibo.sdk.auth.WeiboAuthListener;import com.sina.weibo.sdk.exception.WeiboException;import com.sina.weibo.sdk.utils.Utility;import com.tencent.connect.common.Constants;import com.tencent.connect.share.QQShare;import com.tencent.connect.share.QzoneShare;import com.tencent.mm.sdk.modelmsg.SendMessageToWX;import com.tencent.mm.sdk.modelmsg.WXMediaMessage;import com.tencent.mm.sdk.modelmsg.WXWebpageObject;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.WXAPIFactory;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import java.io.ByteArrayOutputStream;import java.util.ArrayList;public class ShareUtils {    private static final String PREFERENCES_NAME = "com_weibo_sdk_android";    private static final String KEY_UID = "uid";    private static final String KEY_ACCESS_TOKEN = "access_token";    private static final String KEY_EXPIRES_IN = "expires_in";    private static final String KEY_REFRESH_TOKEN = "refresh_token";    public static boolean isWeiXinInstallAndSupport(Context context) {        boolean flag = false;        IWXAPI api = WXAPIFactory.createWXAPI(context, AppConfig.WEIXIN_PAY_ID, false);        if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {            flag = true;        }        return flag;    }    /**    * @param context    * @param type    1:分享到朋友圈            2:分享到微信好友    * @param title  标题    * @param url    跳转url    * @param imageId 图片id    */    public static void shareToWeChat(Context context, int type, String title, String url, int imageId) {        IWXAPI api = WXAPIFactory.createWXAPI(context, AppConfig.WEIXIN_PAY_ID);        api.registerApp(AppConfig.WEIXIN_PAY_ID);        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageId);        Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 150, 150, true);        bitmap.recycle();        WXWebpageObject webpageObject = new WXWebpageObject();        webpageObject.webpageUrl = url;        WXMediaMessage msg = new WXMediaMessage();        msg.mediaObject = webpageObject;        msg.title = title;        msg.thumbData = bmpToByteArray(thumbBmp, true);        SendMessageToWX.Req req = new SendMessageToWX.Req();        req.message = msg;        req.transaction = System.currentTimeMillis() + "";        req.scene = type == 1 ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;        api.sendReq(req);    }    /**    * @param context    * @param title      标题    * @param description 描述    * @param url        跳转URL    * @param imageUrl    图片链接    * @param callBack    */    public static void shareToQQ(Tencent mTencent, Context context, String title, String description, String url, String imageUrl, IUiListener callBack) {        Bundle params = new Bundle();        params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);        params.putString(QQShare.SHARE_TO_QQ_TITLE, title);        params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);        params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);        params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imageUrl);        params.putString(QQShare.SHARE_TO_QQ_APP_NAME, App名字);        mTencent.shareToQQ((Activity) context, params, callBack);    }    /**    * @param context    * @param picLists    图片arraylist,可以分享多张图片    * @param title      标题    * @param description 描述    * @param url        跳转url    * @param callBack    */    public static void shareToZone(Context context, ArrayListpicLists, String title, String description, String url, IUiListener callBack) {

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,565评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,021评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,003评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,015评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,020评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,856评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,178评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,824评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,264评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,788评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,913评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,535评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,130评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,102评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,334评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,298评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,622评论 2 343

推荐阅读更多精彩内容