Android集成微信SDK:微信分享

0、开发者自己做好准备工作:(包括开发者自己创建app和填写app的信息)

官方接入教程文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN

 

1、添加依赖或者jar:

dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' }

dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' }

(其中,前者包含统计功能)

 

 

2、权限:

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

3、清单文件manifest配置:

 <!-- 微信开放平台配置 -->
		<activity
		    android:name=".wxapi.WXEntryActivity"
		    android:label="@string/app_name"
		    android:theme="@android:style/Theme.Translucent.NoTitleBar"
		    android:exported="true"
		    android:taskAffinity="net.sourceforge.simcpux"
		    android:launchMode="singleTask">
		</activity>

 4、创建该路径下的类(包名.wxapi.WXEntryActivity(不可更改))

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO 自动生成的方法存根
		super.onCreate(savedInstanceState);
		//WechatShareTool类见下一步
		new WechatShareTool(this).getApi().handleIntent(getIntent(), this);
	}

	@Override
	public void onReq(BaseReq arg0) {
		// TODO 自动生成的方法存根
		finish();
	}

	@Override
	public void onResp(BaseResp resp) {
		// TODO 自动生成的方法存根
		switch (resp.errCode) { //根据需要的情况进行处理
        case BaseResp.ErrCode.ERR_OK:
            //正确返回
            //ActivityTool.showToast为Toast的简单封装,开发中自行修改
        	ActivityTool.showToast(this, "分享成功");//后来微信改为无论分没分享都返回这一个
            break;
        case BaseResp.ErrCode.ERR_USER_CANCEL:
            //用户取消
      //  	ActivityTool.showToast(this, "取消分享");//取消也会返回ERR_OK
            break;
        case BaseResp.ErrCode.ERR_AUTH_DENIED:
            //认证被否决
        	ActivityTool.showToast(this, "分享失败,认证被否决");
            break;
        case BaseResp.ErrCode.ERR_SENT_FAILED:
            //发送失败
        	ActivityTool.showToast(this, "发送失败");
            break;    
        case BaseResp.ErrCode.ERR_UNSUPPORT:
            //不支持错误
        	ActivityTool.showToast(this, "不支持错误");
            break;    
        case BaseResp.ErrCode.ERR_COMM:
            //一般错误
        	ActivityTool.showToast(this, "分享失败");
            break;       
        default:
            //其他不可名状的情况
            break;
		}
		finish();
	}

}

5、分享核心代码部分:

public class WechatShareTool {
	
	private final static String WX_APP_ID = "your key";//WX_APP_ID自行修改为你的appkey
	private IWXAPI api;
	private int toFriend = SendMessageToWX.Req.WXSceneSession;//会话
	private int toFriendCircle = SendMessageToWX.Req.WXSceneTimeline;//朋友圈
            		//SendMessageToWX.Req.WXSceneFavorite //分享到收藏
	
	public WechatShareTool(Context context){
		api = WXAPIFactory.createWXAPI(context, WX_APP_ID,false);
		// 将应用的appId注册到微信
    	api.registerApp(WX_APP_ID);
	}
	
	public IWXAPI getApi(){
		return api;
	}
	
	/*
	 * 是否安装了微信
	 */
	public boolean isWXAppInstalled(){
		return api.isWXAppInstalled();  
	}
	
	/**
	 * 微信文字分享
	 * @param text
    * @param isNotToFriend 是否分享到朋友圈
	 */
	public void shareText(String text,boolean isNotToFriend){
		//初始化一个 WXTextObject 对象,填写分享的文本内容
		WXTextObject textObj = new WXTextObject();
		textObj.text = text;
		
		//用 WXTextObject 对象初始化一个 WXMediaMessage 对象
		WXMediaMessage msg = new WXMediaMessage();
		msg.mediaObject = textObj;
		msg.description = text;
		
		shareToWX("text", msg, isNotToFriend);
	}
	
	/*
	 * 保证字符串唯一
	 */
	private String buildTransaction(final String type) {
		return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
	}
	
	/**
	 * 分享图片
	 * @param file
	 */
	public void shareImage(String picturePath,boolean isNotToFriend){
		Bitmap bmp = BitmapFactory.decodeFile(picturePath);
		//初始化 WXImageObject 和 WXMediaMessage 对象
		WXImageObject imgObj = new WXImageObject(bmp);
		WXMediaMessage msg = new WXMediaMessage();
		msg.mediaObject = imgObj;

		//设置缩略图
		Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
		bmp.recycle();
		msg.thumbData = OtherTool.bmpToByteArray(thumbBmp, true);

		shareToWX("img", msg, isNotToFriend);
	}
	
	/**
	 * 分享音乐
	 * @param title
	 * @param description
	 * @param musicUrl
	 * @param file
	 */
	public void shareMusic(String title,String description,String musicUrl,String picturePath,boolean isNotToFriend){
		//初始化一个WXMusicObject,填写url
		WXMusicObject music = new WXMusicObject();
		music.musicUrl=musicUrl;

		Bitmap bmp = BitmapFactory.decodeFile(picturePath);
		WXMediaMessage msg = getWXMediaMessage(title, description, music, bmp);

		shareToWX("music",msg,isNotToFriend);
	}
	
	/**
	 * 分享视频
	 * @param title
	 * @param description
	 * @param viedoUrl
	 * @param file
	 */
	public void shareVideo(String title,String description,String viedoUrl ,String picturePath,boolean isNotToFriend){
		//初始化一个WXVideoObject,填写url
		WXVideoObject video = new WXVideoObject();
		video.videoUrl = viedoUrl;

		Bitmap bmp = BitmapFactory.decodeFile(picturePath);
		WXMediaMessage msg = getWXMediaMessage(title, description, video, bmp);

		shareToWX("video",msg,isNotToFriend);
	}
	
	/*
	 * 设置mediaMessage和图片缩略图
	 */
	private WXMediaMessage getWXMediaMessage(String title,String description,IMediaObject media,Bitmap bmp){
		WXMediaMessage msg = new WXMediaMessage();
		msg.mediaObject = media;
		msg.title = title;
		msg.description = description;
		
		//设置缩略图
		Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 100, 100, true);
		bmp.recycle();
		msg.thumbData = bmpToByteArray(thumbBmp, true);//方法在最后面
		return msg;
	}
	
	/*
	 * 分享
	 */
	private void shareToWX(String type,WXMediaMessage msg,boolean isNotToFriend){
		//构造一个Req
		SendMessageToWX.Req req = new SendMessageToWX.Req();
		req.transaction = buildTransaction(type);
		req.message =msg;
		if(isNotToFriend)
			req.scene = toFriendCircle;
		else
			req.scene = toFriend;
		req.userOpenId = WX_APP_ID;

		//调用api接口,发送数据到微信
		api.sendReq(req);
	}
 
 /*
	 * 图片转换
	 */
	private byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
		ByteArrayOutputStream output = new ByteArrayOutputStream();
		bmp.compress(CompressFormat.PNG, 100, output);
		if (needRecycle) {
			bmp.recycle();
		}
		
		byte[] result = output.toByteArray();
		try {
			output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

}

6、使用 

实例化 WechatShareTool类后直接调用它的对应public的方法即可

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 微信支付 SDK 的对调打印主要是指在开发过程中,使用 SDK 提供的接口进行支付功能的调试和输出日志信息。 对调打印的目的是为了方便开发人员在开发过程中进行调试和定位问题。在使用微信支付 SDK 进行支付功能开发时,可以通过在关键代码位置添加打印语句,用于输出相关的调试信息,以便于分析和调试。 在对调打印中,可以根据需要打印的信息进行选择,如订单号、支付结果、微信支付 SDK 的版本等。一般来说,在支付请求发送之前和支付结果回调之后的关键阶段打印信息较多,可以通过打印语句输出相关的请求参数和回调结果,以便于了解支付流程和排查可能出现的问题。 在使用 Android 微信支付 SDK 进行对调打印时,需要注意以下几点: 1. 确保在正确的位置插入打印语句,一般在关键代码处添加,如支付请求发送前、支付结果回调等。 2. 打印的信息要具有可读性,可以输出关键参数的值、状态信息等,便于分析和定位问题。 3. 在实际发布应用之前,需要及时去除对调打印相关的代码,以避免信息泄露和代码冗余。 总之,通过对调打印的使用,开发人员能够更方便地进行支付功能的开发和调试,及时排查问题并优化代码,提高应用的支付体验。 ### 回答2: Android微信支付SDK是一种用于在Android应用程序中集成微信支付功能的开发工具包。在进行对调打印时,主要有以下几个步骤: 首先,你需要确认你的开发环境已经配置好,包括Android Studio和相关的开发工具包。接下来,在微信开放平台注册一个开发者账号,并创建一个应用,获得相应的AppID和AppSecret。 然后,你需要下载并导入微信支付SDK到你的Android项目中。可以通过在项目的build.gradle文件中添加相关依赖来导入SDK。然后,在你的项目中创建一个用于处理支付结果的回调类。 接着,你需要在你的应用中添加调起微信支付的代码。首先,你需要获取一个用于支付的预支付订单号,并根据微信支付要求对订单进行签名处理。然后,你可以使用WXAPIFactory工厂类的createWXAPI方法创建一个WXAPI对象,并将AppID注册到该对象上。 最后,在调起支付的时候,你需要构建一个PayReq对象,并将必要的支付参数设置到该对象中。然后,调用WXAPI的sendReq方法,将PayReq对象发送给微信客户端进行支付。支付结果将通过之前注册的回调类返回给你的应用。 总结起来,对调打印的过程包括了注册微信开放平台账号,导入微信支付SDK,实现支付结果回调,创建并注册WXAPI对象,构建并发送PayReq对象。通过以上步骤,你的Android应用就可以使用微信支付功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值