微信公众账号第三方平台全网发布源码(java)- 实战测试通过
[java]&view plain©
package&org.jeecgframework.web.rest.&&
import&java.io.BufferedR&&
import&java.io.IOE&&
import&java.io.PrintW&&
import&java.security.MessageD&&
import&java.security.NoSuchAlgorithmE&&
import&java.util.A&&
import&java.util.C&&
import&java.util.D&&
import&java.util.HashM&&
import&java.util.L&&
import&java.util.M&&
import&javax.servlet.http.HttpServletR&&
import&javax.servlet.http.HttpServletR&&
import&mons.lang.StringU&&
import&org.dom4j.D&&
import&org.dom4j.DocumentE&&
import&org.dom4j.DocumentH&&
import&org.dom4j.E&&
import&org.jeecgframework.core.util.LogU&&
import&org.jeecgframework.core.util.ResourceU&&
import&org.jeecgframework.core.util.oConvertU&&
import&org.jeecgframework.web.system.service.SystemS&&
import&org.jeewx.api.core.exception.WexinReqE&&
import&org.jeewx.api.mp.aes.AesE&&
import&org.jeewx.api.mp.aes.WXBizMsgC&&
import&org.jeewx.api.third.JwThirdAPI;&&
import&org.jeewx.api.third.model.ApiComponentT&&
import&org.springframework.beans.factory.annotation.A&&
import&org.springframework.stereotype.C&&
import&org.springframework.web.bind.annotation.RequestM&&
import&weixin.open.entity.base.WeixinOpenAccountE&&
&*&微信公众账号第三方平台全网发布(java)&
&*&@author:&jeewx开源社区&
&*&@网址:&
&*&@:www.jeecg.org&
&*&@date&&
@Controller&&
@RequestMapping(&/openwx&)&&
public&class&OpenwxController&{&&
&&&&private&final&String&APPID&=&&???&;&&
&&&&&*&微信全网测试账号&
&&&&private&final&static&String&COMPONENT_APPID&=&&???&;&&
&&&&private&final&String&COMPONENT_APPSECRET&=&&???&;&&
&&&&private&final&static&String&COMPONENT_ENCODINGAESKEY&=&&?????&;&&
&&&&private&final&static&String&COMPONENT_TOKEN&=&&?????&;&&
&&&&@Autowired&&
&&&&private&SystemService&systemS&&
&&&&&*&授权事件接收&
&&&&&*&@param&request&
&&&&&*&@param&response&
&&&&&*&@throws&IOException&
&&&&&*&@throws&AesException&
&&&&&*&@throws&DocumentException&
&&&&@RequestMapping(value&=&&/event/authorize&)&&
&&&&public&void&acceptAuthorizeEvent(HttpServletRequest&request,&HttpServletResponse&response)&throws&IOException,&AesException,&DocumentException&{&&
//&&&&&&&(&微信第三方平台---------微信推送Ticket消息10分钟一次-----------&+&DataUtils.getDataString(DataUtils.yyyymmddhhmmss));&&
&&&&&&&&&processAuthorizeEvent(request);&&
&&&&&&&&&output(response,&&success&);&//&输出响应的内容。&&
&&&&@RequestMapping(value&=&&/authorCallback&)&&
&&&&public&void&authorCallback(HttpServletRequest&request,&HttpServletResponse&response)&throws&IOException,&AesException,&DocumentException&{&&
&&&&&&&&String&auth_code&=&request.getParameter(&auth_code&);&&
&&&&&&&&String&expires_in&=&request.getParameter(&auth_code&);&&
&&&&&&&&&&
&&&&&*&一键授权功能&
&&&&&*&@param&request&
&&&&&*&@param&response&
&&&&&*&@throws&IOException&
&&&&&*&@throws&AesException&
&&&&&*&@throws&DocumentException&
&&&&@RequestMapping(value&=&&/goAuthor&)&&
&&&&public&void&goAuthor(HttpServletRequest&request,&HttpServletResponse&response)&throws&IOException,&AesException,&DocumentException&{&&
&&&&&&&&ApiComponentToken&apiComponentToken&=&new&ApiComponentToken();&&
&&&&&&&&apiComponentToken.setComponent_appid(COMPONENT_APPID);&&
&&&&&&&&apiComponentToken.setComponent_appsecret(COMPONENT_APPSECRET);&&
&&&&&&&&WeixinOpenAccountEntity&&entity&=&getWeixinOpenAccount(APPID);&&
&&&&&&&&apiComponentToken.setComponent_verify_ticket(entity.getTicket());&&
&&&&&&&&try&{&&
&&&&&&&&&&&&String&component_access_token&=&JwThirdAPI.getAccessToken(apiComponentToken);&&
&&&&&&&&&&&&//预授权码&&
&&&&&&&&&&&&String&preAuthCode&=&JwThirdAPI.getPreAuthCode(COMPONENT_APPID,&component_access_token);&&
&&&&&&&&&&&&String&url&=&&https://mp./cgi-bin/componentloginpage?component_appid=&+COMPONENT_APPID+&&pre_auth_code=&+preAuthCode+&&redirect_uri=&+ResourceUtil.getConfigByName(&domain&)+&/rest/openwx/authorCallback&;&&
&&&&&&&&&&&&response.sendRedirect(url);&&
&&&&&&&&}&catch&(WexinReqException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&@RequestMapping(value&=&&{appid}/callback&)&&
&&&&public&void&acceptMessageAndEvent(HttpServletRequest&request,&HttpServletResponse&response)&throws&IOException,&AesException,&DocumentException&{&&
&&&&&&&&String&msgSignature&=&request.getParameter(&msg_signature&);&&
&&&&&&&&//(&第三方平台全网发布-------------{appid}/callback-----------验证开始。。。。msg_signature=&+msgSignature);&&
&&&&&&&&if&(!StringUtils.isNotBlank(msgSignature))&&
&&&&&&&&&&&&//&微信推送给第三方开放平台的消息一定是加过密的,无消息无法解密消息&&
&&&&&&&&StringBuilder&sb&=&new&StringBuilder();&&
&&&&&&&&BufferedReader&in&=&request.getReader();&&
&&&&&&&&String&&&
&&&&&&&&while&((line&=&in.readLine())&!=&null)&{&&
&&&&&&&&&&&&sb.append(line);&&
&&&&&&&&}&&
&&&&&&&&in.close();&&
&&&&&&&&String&xml&=&sb.toString();&&
&&&&&&&&Document&doc&=&DocumentHelper.parseText(xml);&&
&&&&&&&&Element&rootElt&=&doc.getRootElement();&&
&&&&&&&&String&toUserName&=&rootElt.elementText(&ToUserName&);&&
&&&&&&&&//微信全网测试账号&&
//&&&&&&&&if&(StringUtils.equalsIgnoreCase(toUserName,&APPID))&{&&
//&&&&&&&&&&&(&全网发布接入检测消息反馈开始---------------APPID=&+&APPID&+&------------------------toUserName=&+toUserName);&&
&&&&&&&&&&&checkWeixinAllNetworkCheck(request,response,xml);&&
//&&&&&&&&}&&
&&&&&*&处理授权事件的推送&
&&&&&*&@param&request&
&&&&&*&@throws&IOException&
&&&&&*&@throws&AesException&
&&&&&*&@throws&DocumentException&
&&&&public&void&processAuthorizeEvent(HttpServletRequest&request)&throws&IOException,&DocumentException,&AesException&{&&
&&&&&&&&String&nonce&=&request.getParameter(&nonce&);&&
&&&&&&&&String×tamp&=&request.getParameter(×tamp&);&&
&&&&&&&&String&signature&=&request.getParameter(&signature&);&&
&&&&&&&&String&msgSignature&=&request.getParameter(&msg_signature&);&&
&&&&&&&&if&(!StringUtils.isNotBlank(msgSignature))&&
&&&&&&&&&&&&//&微信推送给第三方开放平台的消息一定是加过密的,无消息加密无法解密消息&&
&&&&&&&&boolean&isValid&=&checkSignature(COMPONENT_TOKEN,&signature,×tamp,&nonce);&&
&&&&&&&&if&(isValid)&{&&
&&&&&&&&&&&&StringBuilder&sb&=&new&StringBuilder();&&
&&&&&&&&&&&&BufferedReader&in&=&request.getReader();&&
&&&&&&&&&&&&String&&&
&&&&&&&&&&&&while&((line&=&in.readLine())&!=&null)&{&&
&&&&&&&&&&&&&&&&sb.append(line);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&String&xml&=&sb.toString();&&
//&&&&&&&&&&&&(&第三方平台全网发布-----------------------原始&Xml=&+xml);&&
&&&&&&&&&&&&String&encodingAesKey&=&COMPONENT_ENCODINGAESKEY;//&第三方平台加密密钥&&
&&&&&&&&&&&&String&appId&=&getAuthorizerAppidFromXml(xml);//&此时加密的xml数据中ToUserName是非加密的,解析xml获取即可&&
&&&&&&&&&&&&//(&第三方平台全网发布-------------appid----------getAuthorizerAppidFromXml(xml)-----------appId=&+appId);&&
&&&&&&&&&&&&WXBizMsgCrypt&pc&=&new&WXBizMsgCrypt(COMPONENT_TOKEN,&encodingAesKey,&COMPONENT_APPID);&&
&&&&&&&&&&&&xml&=&pc.decryptMsg(msgSignature,×tamp,&nonce,&xml);&&
//&&&&&&&&&&&&(&第三方平台全网发布-----------------------解密后&Xml=&+xml);&&
&&&&&&&&&&&&processAuthorizationEvent(xml);&&
&&&&&&&&}&&
&&&&&*&保存Ticket&
&&&&&*&@param&xml&
&&&&void&processAuthorizationEvent(String&xml){&&
&&&&&&&&Document&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&doc&=&DocumentHelper.parseText(xml);&&
&&&&&&&&&&&&Element&rootElt&=&doc.getRootElement();&&
&&&&&&&&&&&&String&ticket&=&rootElt.elementText(&ComponentVerifyTicket&);&&
&&&&&&&&&&&&if(oConvertUtils.isNotEmpty(ticket)){&&
&&&&&&&&&&&&&&&&(&8、推送component_verify_ticket协议-----------ticket&=&&+ticket);&&
&&&&&&&&&&&&&&&&WeixinOpenAccountEntity&&entity&=&getWeixinOpenAccount(APPID);&&
&&&&&&&&&&&&&&&&entity&=&entity==null?new&WeixinOpenAccountEntity():&&
&&&&&&&&&&&&&&&&entity.setTicket(ticket);&&
&&&&&&&&&&&&&&&&entity.setAppid(APPID);&&
&&&&&&&&&&&&&&&&entity.setGetTicketTime(new&Date());&&
&&&&&&&&&&&&&&&&systemService.saveOrUpdate(entity);&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(DocumentException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&*&获取授权账号信息&
&&&&&*&@param&appid&
&&&&&*&@return&
&&&&WeixinOpenAccountEntity&getWeixinOpenAccount(String&appid){&&
&&&&&&&&WeixinOpenAccountEntity&&entity&=&&&
&&&&&&&&List&WeixinOpenAccountEntity&&ls&=&systemService.findByProperty(WeixinOpenAccountEntity.class,&&appid&,&appid);&&
&&&&&&&&if(ls!=null&&&&ls.size()!=0){&&
&&&&&&&&&&&&&entity&=&ls.get(0);&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&获取授权的Appid&
&&&&&*&@param&xml&
&&&&&*&@return&
&&&&String&getAuthorizerAppidFromXml(String&xml)&{&&
&&&&&&&&Document&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&doc&=&DocumentHelper.parseText(xml);&&
&&&&&&&&&&&&Element&rootElt&=&doc.getRootElement();&&
&&&&&&&&&&&&String&toUserName&=&rootElt.elementText(&ToUserName&);&&
&&&&&&&&&&&&return&toUserN&&
&&&&&&&&}&catch&(DocumentException&e)&{&&
&&&&&&&&&&&&//&TODO&Auto-generated&catch&block&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&public&void&checkWeixinAllNetworkCheck(HttpServletRequest&request,&HttpServletResponse&response,String&xml)&throws&DocumentException,&IOException,&AesException{&&
&&&&&&&&String&nonce&=&request.getParameter(&nonce&);&&
&&&&&&&&String×tamp&=&request.getParameter(×tamp&);&&
&&&&&&&&String&msgSignature&=&request.getParameter(&msg_signature&);&&
&&&&&&&&WXBizMsgCrypt&pc&=&new&WXBizMsgCrypt(COMPONENT_TOKEN,&COMPONENT_ENCODINGAESKEY,&COMPONENT_APPID);&&
&&&&&&&&xml&=&pc.decryptMsg(msgSignature,×tamp,&nonce,&xml);&&
&&&&&&&&Document&doc&=&DocumentHelper.parseText(xml);&&
&&&&&&&&Element&rootElt&=&doc.getRootElement();&&
&&&&&&&&String&msgType&=&rootElt.elementText(&MsgType&);&&
&&&&&&&&String&toUserName&=&rootElt.elementText(&ToUserName&);&&
&&&&&&&&String&fromUserName&=&rootElt.elementText(&FromUserName&);&&
//&&&&&&&&(&---全网发布接入检测--step.1-----------msgType=&+msgType+&-----------------toUserName=&+toUserName+&-----------------fromUserName=&+fromUserName);&&
//&&&&&&&&(&---全网发布接入检测--step.2-----------xml=&+xml);&&
&&&&&&&&if(&event&.equals(msgType)){&&
//&&&&&&&&&&&(&---全网发布接入检测--step.3-----------事件消息--------&);&&
&&&&&&&&&&&&&String&event&=&rootElt.elementText(&Event&);&&
&&&&&&&&&&&&&replyEventMessage(request,response,event,toUserName,fromUserName);&&
&&&&&&&&}else&if(&text&.equals(msgType)){&&
//&&&&&&&&&&&(&---全网发布接入检测--step.3-----------文本消息--------&);&&
&&&&&&&&&&&&&String&content&=&rootElt.elementText(&Content&);&&
&&&&&&&&&&&&&processTextMessage(request,response,content,toUserName,fromUserName);&&
&&&&&&&&}&&
&&&&public&void&replyEventMessage(HttpServletRequest&request,&HttpServletResponse&response,&String&event,&String&toUserName,&String&fromUserName)&throws&DocumentException,&IOException&{&&
&&&&&&&&String&content&=&event&+&&from_callback&;&&
//&&&&&&&&(&---全网发布接入检测------step.4-------事件回复消息&&content=&+content&+&&&&&toUserName=&+toUserName+&&&&fromUserName=&+fromUserName);&&
&&&&&&&&replyTextMessage(request,response,content,toUserName,fromUserName);&&
&&&&public&void&processTextMessage(HttpServletRequest&request,&HttpServletResponse&response,String&content,String&toUserName,&String&fromUserName)&throws&IOException,&DocumentException{&&
&&&&&&&&if(&TESTCOMPONENT_MSG_TYPE_TEXT&.equals(content)){&&
&&&&&&&&&&&&String&returnContent&=&content+&_callback&;&&
&&&&&&&&&&&&replyTextMessage(request,response,returnContent,toUserName,fromUserName);&&
&&&&&&&&}else&if(StringUtils.startsWithIgnoreCase(content,&&QUERY_AUTH_CODE&)){&&
&&&&&&&&&&&&output(response,&&&);&&
&&&&&&&&&&&&//接下来***API再回复一次消息&&
&&&&&&&&&&&&replyApiTextMessage(request,response,content.split(&:&)[1],fromUserName);&&
&&&&&&&&}&&
&&&&public&void&replyApiTextMessage(HttpServletRequest&request,&HttpServletResponse&response,&String&auth_code,&String&fromUserName)&throws&DocumentException,&IOException&{&&
&&&&&&&&String&authorization_code&=&auth_&&
&&&&&&&&//&得到微信授权成功的消息后,应该立刻进行处理!!相关信息只会在首次授权的时候推送过来&&
&&&&&&&&System.out.println(&------step.1----使用***消息接口回复粉丝----逻辑开始-------------------------&);&&
&&&&&&&&try&{&&
&&&&&&&&&&&&ApiComponentToken&apiComponentToken&=&new&ApiComponentToken();&&
&&&&&&&&&&&&apiComponentToken.setComponent_appid(COMPONENT_APPID);&&
&&&&&&&&&&&&apiComponentToken.setComponent_appsecret(COMPONENT_APPSECRET);&&
&&&&&&&&&&&&WeixinOpenAccountEntity&&entity&=&getWeixinOpenAccount(APPID);&&
&&&&&&&&&&&&apiComponentToken.setComponent_verify_ticket(entity.getTicket());&&
&&&&&&&&&&&&String&component_access_token&=&JwThirdAPI.getAccessToken(apiComponentToken);&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&System.out.println(&------step.2----使用***消息接口回复粉丝-------&component_access_token&=&&+component_access_token&+&&---------authorization_code&=&&+authorization_code);&&
&&&&&&&&&&&&net.sf.json.JSONObject&authorizationInfoJson&=&JwThirdAPI.getApiQueryAuthInfo(COMPONENT_APPID,&authorization_code,&component_access_token);&&
&&&&&&&&&&&&System.out.println(&------step.3----使用***消息接口回复粉丝--------------&获取authorizationInfoJson&=&&+authorizationInfoJson);&&
&&&&&&&&&&&&net.sf.json.JSONObject&infoJson&=&authorizationInfoJson.getJSONObject(&authorization_info&);&&
&&&&&&&&&&&&String&authorizer_access_token&=&infoJson.getString(&authorizer_access_token&);&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&Map&String,Object&&obj&=&new&HashMap&String,Object&();&&
&&&&&&&&&&&&Map&String,Object&&msgMap&=&new&HashMap&String,Object&();&&
&&&&&&&&&&&&String&msg&=&auth_code&+&&_from_api&;&&
&&&&&&&&&&&&msgMap.put(&content&,&msg);&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&obj.put(&touser&,&fromUserName);&&
&&&&&&&&&&&&obj.put(&msgtype&,&&text&);&&
&&&&&&&&&&&&obj.put(&text&,&msgMap);&&
&&&&&&&&&&&&JwThirdAPI.sendMessage(obj,&authorizer_access_token);&&
&&&&&&&&}&catch&(WexinReqException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&}&&&&&
&&&&&*&验证是否过期&
&&&&&*&@param&accessTokenExpires&
&&&&&*&@return&
&&&&boolean&isExpired(long&accessTokenExpires){&&
&&&&&&&&return&&&
&&&&&*&回复微信服务器&文本消息&&
&&&&&*&@param&request&
&&&&&*&@param&response&
&&&&&*&@param&content&
&&&&&*&@param&toUserName&
&&&&&*&@param&fromUserName&
&&&&&*&@throws&DocumentException&
&&&&&*&@throws&IOException&
&&&&public&void&replyTextMessage(HttpServletRequest&request,&HttpServletResponse&response,&String&content,&String&toUserName,&String&fromUserName)&throws&DocumentException,&IOException&{&&
&&&&&&&&Long&createTime&=&Calendar.getInstance().getTimeInMillis()&/&1000;&&
&&&&&&&&StringBuffer&sb&=&new&StringBuffer();&&
&&&&&&&&sb.append(&&xml&&);&&
&&&&&&&&sb.append(&&ToUserName&&![CDATA[&+fromUserName+&]]&&/ToUserName&&);&&
&&&&&&&&sb.append(&&FromUserName&&![CDATA[&+toUserName+&]]&&/FromUserName&&);&&
&&&&&&&&sb.append(&&CreateTime&&+createTime+&&/CreateTime&&);&&
&&&&&&&&sb.append(&&MsgType&&![CDATA[text]]&&/MsgType&&);&&
&&&&&&&&sb.append(&&Content&&![CDATA[&+content+&]]&&/Content&&);&&
&&&&&&&&sb.append(&&/xml&&);&&
&&&&&&&&String&replyMsg&=&sb.toString();&&
&&&&&&&&&&
&&&&&&&&String&returnvaleue&=&&&;&&
&&&&&&&&try&{&&
&&&&&&&&&&&&WXBizMsgCrypt&pc&=&new&WXBizMsgCrypt(COMPONENT_TOKEN,&COMPONENT_ENCODINGAESKEY,&COMPONENT_APPID);&&
&&&&&&&&&&&&returnvaleue&=&pc.encryptMsg(replyMsg,&createTime.toString(),&&easemob&);&&
//&&&&&&&&&&&&System.out.println(&------------------加密后的返回内容&returnvaleue:&&+returnvaleue);&&
&&&&&&&&}&catch&(AesException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&output(response,&returnvaleue);&&
&&&&public&static&void&main(String[]&args)&{&&
&&&&&&&&&Long&createTime&=&Calendar.getInstance().getTimeInMillis()&/&1000;&&
&&&&&&&&&String&replyMsg&=&&LOCATIONfrom_callback&;&&
&&&&&&&&&&&
&&&&&&&&&String&returnvaleue&=&&&;&&
&&&&&&&&&try&{&&
&&&&&&&&&&&&&WXBizMsgCrypt&pc&=&new&WXBizMsgCrypt(COMPONENT_TOKEN,&COMPONENT_ENCODINGAESKEY,&COMPONENT_APPID);&&
&&&&&&&&&&&&&returnvaleue&=&pc.encryptMsg(replyMsg,&createTime.toString(),&&easemob&);&&
&&&&&&&&&&&&&System.out.println(returnvaleue);&&
&&&&&&&&&}&catch&(AesException&e)&{&&
&&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&}&&
&&&&&*&工具类:回复微信服务器&文本消息&&
&&&&&*&@param&response&
&&&&&*&@param&returnvaleue&
&&&&public&void&output(HttpServletResponse&response,String&returnvaleue){&&
&&&&&&&&try&{&&
&&&&&&&&&&&&PrintWriter&pw&=&response.getWriter();&&
&&&&&&&&&&&&pw.write(returnvaleue);&&
//&&&&&&&&&&System.out.println(&****************returnvaleue***************=&+returnvaleue);&&
&&&&&&&&&&&&pw.flush();&&
&&&&&&&&}&catch&(IOException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&*&判断是否加密&
&&&&&*&@param&token&
&&&&&*&@param&signature&
&&&&&*&@param×tamp&
&&&&&*&@param&nonce&
&&&&&*&@return&
&&&&public&static&boolean&checkSignature(String&token,String&signature,String×tamp,String&nonce){&&
&&&&&&&&System.out.println(##token:&+token+&;signature:&+signature+&;timestamp:&+timestamp+&nonce:&+nonce);&&
&&&&&&&&&&&boolean&flag&=&&&
&&&&&&&&&&&if(signature!=null&&&&!signature.equals(&&)&&&×tamp!=null&&&&!timestamp.equals(&&)&&&&nonce!=null&&&&!nonce.equals(&&)){&&
&&&&&&&&&&&&&&String&sha1&=&&&;&&
&&&&&&&&&&&&&&String[]&ss&=&new&String[]&{&token,×tamp,&nonce&};&&&
&&&&&&&&&&&&&&Arrays.sort(ss);&&&&
&&&&&&&&&&&&&&for&(String&s&:&ss)&{&&&&
&&&&&&&&&&&&&&&sha1&+=&s;&&&&
&&&&&&&&&&&&&&}&&&&
&&&&&&&&&&&&&&sha1&=&AddSHA1.SHA1(sha1);&&&&
&&&&&&&&&&&&&&if&(sha1.equals(signature)){&&
&&&&&&&&&&&&&&&flag&=&&&
&&&&&&&&&&&&&&}&&
&&&&&&&&&&&}&&
&&&&&&&&&&&return&&&
&&&&&&&}&&
class&AddSHA1&{&&
&&&&public&static&String&SHA1(String&inStr)&{&&
&&&&&&&&MessageDigest&md&=&&&
&&&&&&&&String&outStr&=&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&md&=&MessageDigest.getInstance(&SHA-1&);&&&&&//选择SHA-1,也可以选择MD5&&
&&&&&&&&&&&&byte[]&digest&=&md.digest(inStr.getBytes());&&&&&&&//返回的是byet[],要转化为String存储比较方便&&
&&&&&&&&&&&&outStr&=&bytetoString(digest);&&
&&&&&&&&}&&
&&&&&&&&catch&(NoSuchAlgorithmException&nsae)&{&&
&&&&&&&&&&&&nsae.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&outS&&
&&&&public&static&String&bytetoString(byte[]&digest)&{&&
&&&&&&&&String&str&=&&&;&&
&&&&&&&&String&tempStr&=&&&;&&
&&&&&&&&&&
&&&&&&&&for&(int&i&=&0;&i&&&digest.&i++)&{&&
&&&&&&&&&&&&tempStr&=&(Integer.toHexString(digest[i]&&&0xff));&&
&&&&&&&&&&&&if&(tempStr.length()&==&1)&{&&
&&&&&&&&&&&&&&&&str&=&str&+&&0&&+&tempS&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&{&&
&&&&&&&&&&&&&&&&str&=&str&+&tempS&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&return&str.toLowerCase();&&微窗Vwins,是一款免费开源的微信公众号和支付宝服务窗管理平台系统;
Vwins微窗是一款方便搭建,扩展性强的免费开源的支付宝服务窗和微信公众号管理系统。
Vwins微窗特点:
1、开源实现支付宝服务窗与微信公众平台的商家数据同步;
2、可以实现用户的微信与支付宝在平台的信息数据同步(预计2.0版本上线);
3、100%开源,方便二次开发;
4、功能性插件灵活方便,可拓展性高;
5、特有的云账号系统更新,保证服务器程序与官方程序及时同步。
6、支持对用户,多账号,方便管理运营。
微窗环境需求:IIS/Apache + MySQL5 + PHP 5.3
对于开发者来说他更是一套优秀的应用程序开发框架和工具包。 它的目标是让你能够更快速的开发微信及服务窗功能应用,它提供了日常任务中所需的大量类库, 以及简单的接口和逻辑结构。通过减少代码量,微窗Vwins 让你更加专注 于你的创造性工作。
微窗Vwins 是为谁准备的?
微窗 就是你所需要的,如果...
你想要一个微信管理平台;
你想要一个服务窗管理平台;
你想要一个可以二次开发的微信、服务窗管理平台
你需要出色的性能;
你需要广泛兼容标准主机上的各种 PHP 版本和配置;
你想要一个几乎零配置的框架;
你想要一个不需使用命令行的框架;
你想要一个不想被编码规则的条条框框限制住的框架;
你对 X萌、X擎 这种庞然大物不感兴趣;
你不喜欢复杂,追求简单;
你需要清晰、完整的文档。
微窗Vwins演示
账号:admin
密码:123456
你还未登录,请选登录!
分享HTML我帮您
收款人:邓志锋 luc***@
收款人:向html580网站(**锋)付钱