`

微信相关操作

阅读更多

     通过转发形式分享图片/图片内容链接到朋友

1.判断超过2个小时重新加载

/**
 * 初始化获取有效的jsapi_ticket,方便后续生成签名
 * 1.定义全局jsapi_ticket用于保存临时票据
 * 2.定义全局lastCallTime用于存放最后一次调用的时间
 * 3.首先判断jsapi_ticket为空或者当前时间 - 全局lastCallTime >= 2个小时则重新获取临时票据
 */
if ("".equals(weixinTicket) || ((new Date().getTime() - lastCallTime) >= 7200 * 1000)) {
    try {

	weixinTicket=weiXinRedPackLinkService.callWeixinAccessToken();
	lastCallTime=new Date().getTime();

    } catch (BusinessException e) {
	logger.error("RomotionRuleController.enterRedPack", e);
    } catch (Exception e) {
	logger.error(e.getMessage(), e);
    }
}

 

2.调用微信JS接口的临时票据jsapi_ticket的有效期为7200秒(2小时)

 

 

// 定义微信wx.config函数用到时间戳
String timestamp = new Date().getTime() + "";
// 定义微信生成签名的随机串
String noncestr = UUID.randomUUID().toString();
String signature = "";
try {
    /**
     * 通过临时票据获取签名
     * 这里的newUrl指的路径为需要转发的链接请求地址
     */
    signature = weiXinRedPackLinkService.signAppend(noncestr, newUrl + "&from=singlemessage&isappinstalled=0", timestamp, weixinTicket);
} catch (BusinessException e) {
    logger.error("RomotionRuleController.enterRedPack", e);
}

 

3.以下为获取微信签名提供方法

 

/**
* 获取微信临时签证
* @return
* @throws BusinessException
*/
public String callWeixinAccessToken() throws BusinessException {

	// 获取微信返回的token
	String accessToken = callWeixinAccessTokencallWeixinAccessToken();
	String ticket = "";
	if (StringUtils.isNotEmpty(accessToken)) {
	    // 获取微信返回的临时票据
	    ticket = callWeixinTicket(accessToken);
	}
	return ticket;
}

/**
* 将获取到的微信返回的签名进行有顺序的拼接
* @param noncestr
* @param signUrl
* @param timestamp
* @param ticket
* @throws BusinessException
*/
public String signAppend(String noncestr, String signUrl, String timestamp, String ticket) throws BusinessException {
	String signature = "";
	//注意这里参数名必须全部小写,且必须有序
	String string1 = "jsapi_ticket=" + ticket +
		"&noncestr=" + noncestr +
		"&timestamp=" + timestamp +
		"&url=" + signUrl;
	try {
	    logger.debug("WeiXinRedPackLinkService.signAppend =: " + string1);
	    MessageDigest crypt = MessageDigest.getInstance("SHA-1");
	    crypt.reset();
	    crypt.update(string1.getBytes("UTF-8"));
	    signature = byteToHex(crypt.digest());
	} catch (NoSuchAlgorithmException e) {
	    throw new BusinessException("WeiXinRedPackLinkService.signAppend he encryption algorithm is not available field", e);
	} catch (UnsupportedEncodingException e) {
	    throw new BusinessException("WeiXinRedPackLinkService.signAppend Does not support the character encoding field", e);
	}

	return signature;
}

/**
* 根据微信平台公众号appId和appSecret获取签名所需的token
* @return
*/
private String callWeixinAccessTokencallWeixinAccessToken() throws BusinessException {
	String weixinURl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx7b0b95f2acea61e2&secret=30514dd42fea986e6a647cf9ccf96da8";

	try {
	    String temp = getHttpContent(weixinURl);
	    if (checkaAccessTocket(temp)) {
		String[] resultArray = StringUtils.split(temp, ",");
		temp = resultArray[0];
		temp = StringUtils.replace(temp, "{\"access_token\":\"", "");
		temp = StringUtils.replace(temp, "\"", "");
		return temp;
	    }
	} catch (Exception e) {
	    throw new BusinessException("WeiXinRedPackLinkService.callWeixinAccessTokencallWeixinAccessToken field", e);
	}

	return null;
}

/**
* 根据token获取微信返回的临时签证
* @param accessToken
* @return
*/
private String callWeixinTicket(String accessToken) throws BusinessException {
	String tokenUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";
	try {
	    String temp = getHttpContent(tokenUrl);
	    WinxinTokenDto winxinTokenDto = new Gson().fromJson(temp, WinxinTokenDto.class);
	    if (winxinTokenDto != null) {
		return winxinTokenDto.getTicket();
	    }
	} catch (Exception e) {
	    throw new BusinessException("WeiXinRedPackLinkService.callWeixinTicket field", e);
	}
	return null;
}

/**
* 根据url通过HttpClient请求链接地址,返回数据
* @param weixinURl
* @returnd
* @throws Exception
*/
private String getHttpContent(String weixinURl) throws Exception {
	HttpClient client = new DefaultHttpClient();
	// 实例化HTTP方法
	HttpGet request = new HttpGet();

	request.setURI(new URI(weixinURl));
	HttpResponse response = client.execute(request);
	String result = EntityUtils.toString(response.getEntity());

	return result;
}

/**
* 校验返回的tocket是否符合条件
* @param result
* @return
*/
private boolean checkaAccessTocket(String result) {
	boolean flg = true;
	if (result.indexOf("{\"access_token\":\"") == -1) {
	    flg = false;
	}
	if (flg) {
	    if (result.indexOf(",") == -1) {
		flg = false;
	    }
	}

	return flg;
}

public String byteToHex(final byte[] hash) {
	Formatter formatter = new Formatter();
	for (byte b : hash)
	{
	    formatter.format("%02x", b);
	}
	String result = formatter.toString();
	formatter.close();
	return result;
}

 

 ==================================================================================

 

二。微信app分享

1.打开网页https://open.weixin.qq.com/   注册微信开发平台账号 

2.参照提示填写相关信息,其中应用包名为项目包的名字,等待客户审核

3.解压微信官方下载的appDemo文件wechat_sdk_sample_android

4.找到该目录下的debug.keystore

5.将debug.keystore复制到自己项目的根目录下,运行该app

6.解压文件Gen_Signature_Android221cbf.jar,并安装到手机,运行该签名工具,写上项目包名获取签名的MD5加密串.

6.将MD5加密串填写到微信开放平台,开发者信息中的应用签名

7.参照官方appDemo进行开发。

 

说明:debug.keystore添加的2中方式:

1.eclipse:Eclipse--->Windows--->Preferences--->Android--->Build 手动变更路径(Custom debug keystore)

 

2.在gradle中配置:

signingConfigs {

          debug {
              storeFile file('../debug.keystore') //如果只有一层目录则不需要../
              storePassword 'android'
              keyAlias 'androiddebugkey'
              keyPassword 'android'
          }
     }

分享到:
评论

相关推荐

    微信支付、退款等操作实例C#版

    3. **用户支付**:用户扫描二维码或者在微信内完成支付操作,微信服务器会向商户后台发送支付结果通知。 4. **接收支付结果通知**:商户服务器需要监听微信支付的异步通知,接收到通知后进行订单状态更新。 二、...

    微信相关的js操作分享网络菜单

    微信相关的 js 操作:分享、网络、菜单

    安卓微信相关相关-简单微信分享Demo.rar

    【安卓微信相关相关-简单微信分享Demo】 在安卓开发中,微信分享是常见的社交功能,让用户能够方便地将内容(如文字、图片、链接等)分享到微信朋友圈或微信好友。这个“简单微信分享Demo”提供了实现这一功能的...

    微信小程序支付操作手册.pdf

    微信小程序支付操作手册 微信小程序支付操作手册.pdf 是一份详细的微信小程序支付操作手册,涵盖了微信小程序支付的整个流程,从用户登录到支付结果通知。下面是从该手册中提取的相关知识点: 1. 小程序登录API:...

    微信小程序操作WIFI和蓝牙

    同时,为了保证隐私和安全,微信小程序对WIFI和蓝牙的使用有严格的权限控制,开发者需要在小程序的权限设置中明确声明,并在用户同意后才能进行相关操作。 此外,对于`wifi-bluetooth`这个压缩包文件,它可能包含了...

    微信个人号协议完整可用版本 A16 62登录 微信API code获取 微信ipad协议849 最新更新

    A16 62登录 微信API code获取 微信ipad协议849 最新更新”表明这是一个关于微信个人账号的协议文件集合,包含了A16和62版本的登录协议,以及与获取微信API code和iPad协议849相关的最新更新内容。这可能是一个研究或...

    企业微信微文档操作说明.pdf

    在实际操作中,企业微信微文档可以实现多人同时在线编辑文档和表格,每次更改都将实时更新,提高工作效率。创作者和企业管理员可以灵活设置文档和表格的访问权限,包括内外部访问权限和文档水印,确保信息安全。文档...

    微信跳转 微信遮罩层.zip

    其次,“微信遮罩层”是指在微信环境中,当用户触发跳转操作时,为了提供更好的用户体验,会在页面上显示一个半透明的覆盖层,即遮罩层。遮罩层的主要作用是提示用户即将离开微信环境,进入新的网页,并且通常会附带...

    微信机器人程序python源码,打造属于自己的AI智能微信机器人

    【内容概要】 ...为了获得更好的使用体验,请确保你的微信账号已登录到安装了程序的设备上,并设置好微信相关的权限。同时,我们建议所有操作均应遵守微信官方的相关规定,以避免不必要的风险和麻烦。

    微信ipad协议,安卓协议,微信开发API接口

    总的来说,微信开发API接口是开发者构建微信相关应用的基础,通过掌握和应用这些接口,开发者能够实现丰富的功能,覆盖用户日常使用的大部分场景,从而提升应用的吸引力和实用性。同时,遵守微信的开发规范和协议,...

    PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。.zip

    PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。 PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。 PHP 集成支付 SDK ,集成了支付宝、微信支付的支付...

    微信IPAD 协议 微信接口 WeChatApi

    这个协议的7.1.0版本显然包含了对个人账号操作的支持,允许用户在iPad上登录、发送消息、接收更新以及执行其他微信应用内的功能。 .NET框架是微软开发的一个用于构建各种类型应用程序的开发平台,它提供了丰富的...

    安卓微信相关相关-类似微信断网时候的提示处理.rar

    - 微信在发送消息或执行其他网络操作时,如果遇到网络中断,会有一个内置的重试机制。比如,它可能会在后台定时尝试重新发送未成功发送的数据,同时显示“正在发送”或“发送失败,请稍后重试”的状态提示。 4. **...

    一个基于 Laravel 开发的微信、企业微信 SDK.zip

    接下来,我们将深入探讨使用 Laravel 开发微信和企业微信 SDK 的相关知识点: 1. **Laravel 框架**:Laravel 提供了丰富的工具和库,如路由、中间件、模型、视图、控制器等,用于构建高效、可维护的 PHP 应用。在这...

    PC微信多开电脑微信多开双开

    标题中的“PC微信多开电脑微信多开双开”指的是在个人计算机上同时运行多个微信客户端...总的来说,这个压缩包提供了一个简单的方法,让用户能够在电脑上同时运行多个微信客户端,但操作需谨慎,并遵循相关的使用说明。

    最新微信3.3.0.104PC微信HOOK

    标题中的“最新微信3.3.0.104PC微信HOOK”指的是微信的最新桌面版客户端,版本号为3.3...然而,值得注意的是,未经授权的HOOK和逆向工程可能违反微信的使用协议,甚至触犯相关法律法规,因此在实际操作时需要谨慎行事。

    c# 微信接口,包括小程序,企业微信

    3. **自定义菜单**:创建和管理企业微信的菜单,用户可以通过菜单触发相应的操作。 4. **应用管理**:创建和管理企业内部的应用,如打卡、审批等。 5. **企业通讯录同步**:同步和管理企业员工的联系信息。 6. **...

    微信ipad协议,微信开发API接口

    7. **企业微信**:对于企业级应用,还可以利用企业微信的相关接口,进行企业内部通讯和协同办公。 在使用微信iPad协议和API接口时,开发者需要注意以下几点: - **安全性**:必须遵循微信的安全策略,保护用户数据...

Global site tag (gtag.js) - Google Analytics