通过转发形式分享图片/图片内容链接到朋友
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 + "×tamp=" + 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'
}
}
相关推荐
3. **用户支付**:用户扫描二维码或者在微信内完成支付操作,微信服务器会向商户后台发送支付结果通知。 4. **接收支付结果通知**:商户服务器需要监听微信支付的异步通知,接收到通知后进行订单状态更新。 二、...
微信相关的 js 操作:分享、网络、菜单
【安卓微信相关相关-简单微信分享Demo】 在安卓开发中,微信分享是常见的社交功能,让用户能够方便地将内容(如文字、图片、链接等)分享到微信朋友圈或微信好友。这个“简单微信分享Demo”提供了实现这一功能的...
微信小程序支付操作手册 微信小程序支付操作手册.pdf 是一份详细的微信小程序支付操作手册,涵盖了微信小程序支付的整个流程,从用户登录到支付结果通知。下面是从该手册中提取的相关知识点: 1. 小程序登录API:...
同时,为了保证隐私和安全,微信小程序对WIFI和蓝牙的使用有严格的权限控制,开发者需要在小程序的权限设置中明确声明,并在用户同意后才能进行相关操作。 此外,对于`wifi-bluetooth`这个压缩包文件,它可能包含了...
A16 62登录 微信API code获取 微信ipad协议849 最新更新”表明这是一个关于微信个人账号的协议文件集合,包含了A16和62版本的登录协议,以及与获取微信API code和iPad协议849相关的最新更新内容。这可能是一个研究或...
在实际操作中,企业微信微文档可以实现多人同时在线编辑文档和表格,每次更改都将实时更新,提高工作效率。创作者和企业管理员可以灵活设置文档和表格的访问权限,包括内外部访问权限和文档水印,确保信息安全。文档...
其次,“微信遮罩层”是指在微信环境中,当用户触发跳转操作时,为了提供更好的用户体验,会在页面上显示一个半透明的覆盖层,即遮罩层。遮罩层的主要作用是提示用户即将离开微信环境,进入新的网页,并且通常会附带...
【内容概要】 ...为了获得更好的使用体验,请确保你的微信账号已登录到安装了程序的设备上,并设置好微信相关的权限。同时,我们建议所有操作均应遵守微信官方的相关规定,以避免不必要的风险和麻烦。
总的来说,微信开发API接口是开发者构建微信相关应用的基础,通过掌握和应用这些接口,开发者能够实现丰富的功能,覆盖用户日常使用的大部分场景,从而提升应用的吸引力和实用性。同时,遵守微信的开发规范和协议,...
PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。 PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。 PHP 集成支付 SDK ,集成了支付宝、微信支付的支付...
这个协议的7.1.0版本显然包含了对个人账号操作的支持,允许用户在iPad上登录、发送消息、接收更新以及执行其他微信应用内的功能。 .NET框架是微软开发的一个用于构建各种类型应用程序的开发平台,它提供了丰富的...
- 微信在发送消息或执行其他网络操作时,如果遇到网络中断,会有一个内置的重试机制。比如,它可能会在后台定时尝试重新发送未成功发送的数据,同时显示“正在发送”或“发送失败,请稍后重试”的状态提示。 4. **...
接下来,我们将深入探讨使用 Laravel 开发微信和企业微信 SDK 的相关知识点: 1. **Laravel 框架**:Laravel 提供了丰富的工具和库,如路由、中间件、模型、视图、控制器等,用于构建高效、可维护的 PHP 应用。在这...
标题中的“PC微信多开电脑微信多开双开”指的是在个人计算机上同时运行多个微信客户端...总的来说,这个压缩包提供了一个简单的方法,让用户能够在电脑上同时运行多个微信客户端,但操作需谨慎,并遵循相关的使用说明。
标题中的“最新微信3.3.0.104PC微信HOOK”指的是微信的最新桌面版客户端,版本号为3.3...然而,值得注意的是,未经授权的HOOK和逆向工程可能违反微信的使用协议,甚至触犯相关法律法规,因此在实际操作时需要谨慎行事。
3. **自定义菜单**:创建和管理企业微信的菜单,用户可以通过菜单触发相应的操作。 4. **应用管理**:创建和管理企业内部的应用,如打卡、审批等。 5. **企业通讯录同步**:同步和管理企业员工的联系信息。 6. **...
7. **企业微信**:对于企业级应用,还可以利用企业微信的相关接口,进行企业内部通讯和协同办公。 在使用微信iPad协议和API接口时,开发者需要注意以下几点: - **安全性**:必须遵循微信的安全策略,保护用户数据...