推荐设备MORE

服装类网站商城—微信公共号

服装类网站商城—微信公共号

新闻资讯

作为企业网站建设小白—微信小程序消息从微信

日期:2021-03-09
我要分享

上一礼拜科学研究科学研究了一下运用手机微信微信小程序从手机微信微信公众号信息消息推送。
写一个攻略大全记录一下(编号都贴出来来来了,有一些从我编号中是以数据信息信息内容库文档拿值的,大家酌情考虑考虑到变动)。
[标识:內容1]

提早提前准备工作中中下列:

一阶段
1、申请办理申请注册手机上手机微信手机微信微信公众号。
2、申请办理申请注册手机上手机微信手机微信微信小程序(可以从手机微信微信公众号中快速转换成。
3、申请办理申请注册手机上手机微信对外开放对外开放综合服务平台。

二阶段
1、认证手机微信微信公众号(注意最开始要认证手机微信微信公众号,300认证费。
2、从手机微信微信公众号中关联认证手机微信微信小程序(要不然单独认证又要交300的认证花销,比较费钱。
3、认证手机上手机微信对外开放对外开放综合服务平台(300认证费。

三阶段
1、将手机上手机微信手机微信微信公众号和手机上手机微信手机微信微信小程序关系拿到机手机微信对外开放对外开放综合服务平台下。
2、配置ip受权管理方法(得到对外开放对外开放ip详尽详细地址网站:myip.kkcha/

提早提前准备工作中中完毕。
讲一下手机微信微信公众号和手机微信微信小程序信息消息推送正中间务必选用的id(们)。
手机上手机微信在手机微信微信小程序和手机微信微信公众号正中间绑了很多id.(具体的话还是本身查寻手机上手机微信官方网网API对每一个id做出的描述比较好。下面我只是简单描述一下。
openid:在手机微信微信小程序,手机微信微信公众号中的真正真实身份证,每个顾客在同一个手机微信微信小程序,手机微信微信公众号中的openid是毫无疑问不一样的,手机微信微信公众号和手机微信微信小程序关系关联也不会与样。
unionid:在关系手机上手机微信开发设计设计方案综合服务平台之后,手机微信微信小程序和手机微信微信公众号共通的id(这一就是手机微信微信公众号信息消息推送的关键,因而一定要关系开发设计设计方案综合服务平台。
formid:手机微信微信小程序信息消息推送用的id,有时候候长等规范限制,一般给你cue它一下,它变更值信息消息推送一下,无法长期性有效信息消息推送。

信息消息推送基本概念。
手机微信微信公众号的信息消息推送是根据openid的信息消息推送的。
但手机微信微信公众号id得到被手机上手机微信卡过世了,规范为:尽量要先得到openid,接着根据openid得到unionid.
当顾客在手机微信微信小程序中具体实际操作的状况下,可以根据手机微信微信小程序的openid找寻手机微信微信小程序和手机微信微信公众号公共性性的unionid,接着再去找手机微信微信公众号的openid进行信息消息推送。
关系案例图下列:

信息消息推送步骤。
1、得到手机微信微信小程序顾客openid和unionid.
2、得到手机微信微信公众号顾客openid和unionid.
3、进行信息消息推送。

-----------------------------------------------虽然信息消息推送整个过程看起来十分简易但具体上中间有一点坑因而还是贴了编号-------------------------------
1、得到手机微信微信小程序openid和unionid。
【坑预警信息信息内容!!!!】
手机微信微信小程序的openid和unionid得到有二种方法。

①是马上从后台管理管理方法依据手机上手机微信校验插孔:
String url = "api.weixin.qq/sns/jscode2session?appid="+APPID+ " secret="+SECRET+" js_code="+ wechatCode +" grant_type=authorization_code";得到。好处是马上一次性便可以得到openid,unionid和sessionkey.
接着这种得到方式顾客尽量关注了手机微信微信公众号后运用手机微信微信小程序才能够获得unionid。要不然unionid为空
插孔重要方法下列:

@(value="/checkWechatUser.do")    public LayUIResult checkWechatUser(HttpServletRequest request){    LayUIResult result = new LayUIResult();try{    String APPID = “本身的手机微信微信小程序appid”;    String SECRET = "本身的手机微信微信小程序登录登陆密码";     String wechatCode = “本身的手机微信微信小程序wechatCode”;    if(ObjectUtil.isNull(wechatCode)){        result.setCode(1);        result.setStatus(1);        result.setMsg("手机上手机微信凭证不能认为空");        return result;    }//System.out.println("手机上手机微信乞求了服务");//乞求腾讯手机上手机微信校验插孔String url = "api.weixin.qq/sns/jscode2session?appid="+APPID+ " secret="+SECRET+" js_code="+ wechatCode +" grant_type=authorization_code"; RestTemplate restTemplate = new RestTemplate(); //进行互连网乞求,访问url插孔     ResponseEntity String   responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);   //根据返回值进行过后具体实际操作      if(responseEntity != null responseEntity.getStatusCode() == HttpStatus.OK){       String sessionData = responseEntity.getBody();       //System.out.println("开启了手机上手机微信综合服务平台插孔");       Gson gson = new Gson();       //剖析从手机上手机微信互联网网络服务器获得的openid和session_key;       WeChatSession weChatSession = gson.fromJson(sessionData,WeChatSession.class);       result.setData(weChatSession);                                 String unionid = weChatSession.getUnionid();        //得到顾客的唯一标示       String openId = weChatSession.getOpenid();       //System.out.println("openID:"+openId);       //得到会话秘钥       String sessionKey = weChatSession.getSession_key();       //System.out.println("sessionKey:"+sessionKey);       //开启service层校验数据信息信息内容       result.setCode(0);       //result = userService.checkOpenId(openId, sessionKey);       return result;     }else{      result.setCode(1);      result.setStatus(1);      result.setMsg("校验不了功");      return result;     }    }catch(Exception e){    e.printStackTrace();        result.setCode(1);    result.setStatus(1);    result.setMsg("校验出現出现异常");    return result;}}

这一方法拿完openid和unionid以及sessionkey之后怎样存数据信息信息内容库就是()本身的事情了。
那……倘若该顾客没有关注手机微信微信公众号,我觉得如何得到该顾客的unionid呢。

②前台接待招待wx.getUserInfo得到数据信息数据加密后的标志符串进行解密。(这儿手机上手机微信给把握密案例实例教程,点一下非常连接接可以本身进去看,但没有java……只有本身搞一个。

/*  * 解密 * (non-Javadoc) * @see com.yspro.service.PubUserService#decryptionUserInfo(java.lang.String, java.lang.String, java.lang.String) */@Overridepublic LayUIResult decryptionUserInfo(String encryptedData,String sessionKey, String iv) throws Exception{LayUIResult result = new LayUIResult();// 被数据信息数据加密的数据信息信息内容byte[] dataByte = Base64.decode(encryptedData);// 数据信息数据加密秘钥byte[] keyByte = Base64.decode(sessionKey);// 偏位量byte[] ivByte = Base64.decode(iv); // 倘若密匙不足16位,那么就填补. 这一if 中的内容过重要int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}// 初始化Security.addProvider(new BouncyCastleProvider());Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");parameters.init(new IvParameterSpec(ivByte));cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化byte[] resultByte = cipher.doFinal(dataByte);if (null != resultByte resultByte.length 0) {String result2 = new String(resultByte, "UTF-8");System.out.println(result2);//JSONArray ja = JSONArray.parseArray(result2);JSONObject jo = JSONObject.fromObject(result2);String openid = jo.getString("openId");String unionid = jo.getString("unionId");Map String, String unionid2 = new HashMap ();boolean flag = false;unionid2 = userDao.checkUnionid(openid);if (unionid2.size() == 0 || unionid2 == null){//为空System.out.println("没法根据openid检索到unionid");}else{if(!(YSUtils.checkIsNullOrEmpty(unionid2.get("stf_sta_unionid")))){ //为空,插到unionidint insertId = userDao.setUnionId(openid,unionid);if(insertId != 0){flag = true;}}}}return result;}

这儿选用了一个base64解密的jar包。完全免费免费下载详尽详细地址:
联接:pan.baidu/s/1-OUeFfDKJQC2kYHUpR4epw ;

获得码:92kl 

到这儿,得到手机微信微信小程序的openid和unionid就结束了。

2、得到手机微信微信公众号的openid和unionid.
【坑预警信息信息内容!!!!!】
得到手机微信微信公众号的openid和unionid务必得到一个AccessToken,这一token的有效期一次为7200s,一天最多得到200次(也是有些人说2000次我忘记api里写了多少钱了)。
因而你是把它存数据信息信息内容库还是存全局性性变量缓存文件文档随便你。
但:倘若不断得到的话前一个token的有效时间便能变为五分鐘。得到的状况下两者会出現逐一一段时间并行处理解决有效。
accesstoken手机上手机微信api:mp.weixin.qq/wiki?t=resource/res_main id=mp1421140183
①得到accesstoken的方法:

/*  * 得到accesstoken * (non-Javadoc) * @see com.yspro.service.PubUserService#getAccessToken() */public String getAccessToken()throws Exception {String accessToken = "";    String url="api.weixin.qq/cgi-bin/token?grant_type=client_credential appid="+“手机微信微信公众号appid”+" secret="+"手机微信微信公众号secret";              JSONObject jsonResult=CommonUtil.httpsRequest(url, "POST", "");//乞求外网地址详细地址            if(jsonResult!=null){            accessToken=jsonResult.getString("access_token");            String expires_in = jsonResult.getString("expires_in");            Long timeStamp = System.currentTimeMillis();            String time = String.valueOf((timeStamp/1000+7200));            int insertId= pubUserDao.insertAccessToken(accessToken,time,expires_in);            System.out.println("accessToken的标值:"+accessToken);            }        return accessToken;}//乞求外网地址详细地址          public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {                     JSONObject jsonObject = null;          StringBuffer buffer = new StringBuffer();            try {                // 创建SSLContext总体目标,并运用大伙儿特殊的信任管理方法方式器初始化                TrustManager[] tm = { new MyX509TrustManager() };                SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");                sslContext.init(null, tm, new java.security.SecureRandom());                // 从上述SSLContext总体目标中得到SSLSocketFactory总体目标                SSLSocketFactory ssf = sslContext.getSocketFactory();                    URL url = new URL(requestUrl);                HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();                httpUrlConn.setSSLSocketFactory(ssf);                    httpUrlConn.setDoOutput(true);                httpUrlConn.setDoInput(true);                httpUrlConn.setUseCaches(false);                // 设置乞求方式(GET/POST)                httpUrlConn.setRequestMethod(requestMethod);                    if ("GET".equalsIgnoreCase(requestMethod)) {                   httpUrlConn.connect();                }                                    // 当上解据务必提交时                if (null != outputStr) {                    OutputStream outputStream = httpUrlConn.getOutputStream();                    // 注意序号文档文件格式,防止中文错码                    outputStream.write(outputStr.getBytes("UTF-8"));                    outputStream.close();                }                    // 将返回的输入运行换为标志符串                InputStream inputStream = httpUrlConn.getInputStream();                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);                    String str = null;                while ((str = bufferedReader.readLine()) != null) {                    buffer.append(str);                }                bufferedReader.close();                inputStreamReader.close();                // 释放出来出去资源                inputStream.close();                inputStream = null;                httpUrlConn.disconnect();                jsonObject = JSONObject.fromObject(buffer.toString());            } catch (ConnectException ce) {                ce.printStackTrace();          } catch (Exception e) {                e.printStackTrace();          }            return jsonObject;        }  //拉取手机微信微信公众号openid,接着根据openid得到手机微信微信公众号unionid//得到api:mp.weixin.qq/wiki?t=resource/res_main id=("unchecked")@Overridepublic LayUIResult getUserOpenIdList(String nextOpenid, String accessToken)throws Exception {LayUIResult result = new LayUIResult();//顾客openid文件目录信息内容內容        WechatUser openIdListInfo = null;        synchronized(this){            try {                              //查询不是是有accessToken(我存在了数据信息信息内容库了,因而从数据信息信息内容库里查了             List Map String, Object accessTokenList = pubUserDao.queryAccessToken();            accessToken = String.valueOf(accessTokenList.get(0).get("pro_act_code"));                            do{                    //手机上手机微信手机微信微信公众号得到顾客文件目录信息内容內容插孔详尽详细地址                    String requestUrl = null;                    if(StringUtils.isBlank(nextOpenid)){                        requestUrl = new StringBuffer().append("api.weixin.qq/cgi-bin/user/get?access_token=").append(accessToken).toString();                    }else {                        requestUrl = new StringBuffer().append("api.weixin.qq/cgi-bin/user/get?access_token=")                    .append(accessToken).append(" next_openid=").append(nextOpenid).toString();                    }                                        //后台管理管理方法乞求                    RestTemplate restTemplate = new RestTemplate();                    openIdListInfo = restTemplate.getForObject(requestUrl, WechatUser.class);                    System.out.println("openIdListInfo的标值:"+openIdListInfo);                    if(openIdListInfo != null openIdListInfo.getErrcode() == 0){                        //得到顾客openid文件目录总体目标                        WechatOpenidInfo wxOpenidInfo = openIdListInfo.getData();                        System.out.println("wxOpenidInfo的标值:"+wxOpenidInfo);                        if(wxOpenidInfo != null){                            List String openids = wxOpenidInfo.getOpenid();                            if(openids != null openids.size() 0){                            //得到openid和unionid                        List Map String, Object userInfoList = new ArrayList ();                        List JSONObject user_list = new ArrayList ();                        for (String openid:openids) {                           JSONObject map = new JSONObject();                           map.put("openid", openid);                           map.put("lang", "zh_CN");                           user_list.add(map);                             }                        JSONObject jo = new JSONObject();                        jo.put("user_list",user_list);                       //根据手机微信微信公众号openid得到手机微信微信公众号unionid                        String requestUrl2 = null;                        requestUrl2 = new StringBuffer().append("api.weixin.qq/cgi-bin/user/info/batchget?access_token=").append(accessToken).toString();                        RestTemplate restTemplate2 = new RestTemplate();                                                 //json转换成map                        JSONObject strArr= restTemplate2.postForObject(requestUrl2,jo,JSONObject.class);                                                userInfoList = (List Map String, Object ) strArr.get("user_info_list");                                                                                            //插到数据信息信息内容库                                List PubUser list = new ArrayList ();                                for (Map String, Object map1 : userInfoList) {                                if(String.valueOf(map1.get("subscribe")).equals("1")){                              PubUser pubUser = new PubUser();          pubUser.setPro_pu_openid(String.valueOf(map1.get("openid")));         pubUser.setPro_pu_unionid(String.valueOf(map1.get("unionid")));              pubUser.setPro_pu_valid("1");          list.add(pubUser);                                }        }                                                        //插到数据信息信息内容库                            int insertId = 0;                            //删除数据信息信息内容库内容,再度插到                            pubUserDao.deletePubUserInfo();                            insertId = pubUserDao.insertPubUserInfo(list);                            if(insertId == 0){                            result.setCode(1);                                    result.setMsg("得到顾客文件目录不了功");                                    System.out.println("插到数据信息信息内容表不了功"+result);                                    return result;                            }                                                        }                                                        //拉取文件目录的最后一个顾客的OPENID                            nextOpenid = openIdListInfo.getNext_openid();                            result.setCode(0);                            result.setMsg("得到顾客文件目录获得取得成功");                            System.out.println(result);                            return result;                        }                    }else {                        openIdListInfo.setErrcode(40000);                        openIdListInfo.setErrmsg("得到关注顾客文件目录不了功");                                result.setData(openIdListInfo);                        return result;                                                        }                }                while (openIdListInfo.getCount() == 10000);             } catch (Exception e) {                //LOG.error("得到顾客文件目录不了功",e);                openIdListInfo .setErrcode(40000);                openIdListInfo .setErrmsg("得到顾客文件目录不了功");            e.printStackTrace();                     result.setData(openIdListInfo);                return result;                                        }        }                result.setData(openIdListInfo);          return result; }

--------------------------------------------------------------到这儿得到就全部结束了-----------------------------------------------

信息内容信息消息推送这儿最开始要去手机上手机微信手机微信微信公众号模板哪儿创建模板

模板信息内容官方网网api:mp.weixin.qq/advanced/tmplmsg?action=faq token=100943608 lang=zh_CN
 

//这儿建议用多段程来做,要不然十分非常容易卡。/** * @Description  * @param @param pro_ota_id * @param @param flag * @param @return    * @throws * @author Momo * @date 2020年五月8日 */@Overridepublic LayUIResult sendMessage(String pro_ota_id,String flag)  throws Exception{LayUIResult result2 = new LayUIResult();List Map String, Object accessTokenList = new ArrayList ();accessTokenList = pubUserDao.queryAccessToken();String accessToken = String.valueOf(accessTokenList.get(0).get("pro_act_code"));String tmpurl = "api.weixin.qq/cgi-bin/message/template/send?access_token="+accessToken;JSONObject json = new JSONObject();List Map String, Object infoList = new ArrayList ();//根据公出申请办理申请办理id得到要信息消息推送的审批人union-再根据审批人的union找寻审批人的手机微信微信公众号openid,进行信息消息推送infoList = pushDao.getOpenId(pro_ota_id,flag);for(int i=0;i infoList.size();i++){ //循环系统系统软件信息消息推送json.put("touser", infoList.get(i).get("openid"));//需要消息推送的顾客openIdjson.put("template_id", "模板id");json.put("page", "pages/index/index");//点一下模板可以全自动自动跳转到手机微信微信小程序的具体网页页面//json.put("form_id", formId);//顾客的fromId或者购买单IdJSONObject jo = new JSONObject();jo.put("appid","手机微信微信公众号appid");jo.put("pagepath", "pages/me/me");json.put("miniprogram", jo);json.put("topcolor", "#173177");json.put("data", JsonMsg(infoList.get(i)));//这一data可以马上开启前文的JsonMsg方法转换成必须要消息推送给顾客的信息内容內容String result = httpsRequest(tmpurl, "GET", json.toString()); //注意信息消息推送务必是get方法JSONObject resultJson = JSON.parseObject(result);System.out.println("模板信息内容返回数据信息信息内容:"+resultJson);String errmsg = (String) resultJson.get("errmsg");if(!"ok".equals(errmsg)){  //倘若为errmsg为ok,则寓意着消息推送获得取得成功,手机微信微信公众号信息消息推送信息内容內容给顾客了。result2.setCode(1);result2.setMsg("error");}}result2.setCode(0);result2.setMsg("success");return result2;}/** * @param map  * @method packJsonmsg * @ first  头上部 * @ remark  说明 * @ * @返回类型:JSONObject */public  JSONObject JsonMsg(Map String, Object map){JSONObject json = new JSONObject();try {JSONObject jsonFirst = new JSONObject();if(String.valueOf(map.get("pro_apv_ptype")).equals("pro_apv_ptype_001")){jsonFirst.put("value", map.get("name")+"向您提交了一个"+map.get("typename")+"申请办理申请办理");}else{jsonFirst.put("value", map.get("name")+"向您密送了一个"+map.get("typename")+"申请办理申请办理");}jsonFirst.put("color", "#173177");json.put("first", jsonFirst);/** * 信息内容內容一一部分JSON */JSONObject k1 = new JSONObject();k1.put("value",  map.get("typename"));k1.put("color", "#173177");json.put("keyword1", k1);JSONObject k2 = new JSONObject();k2.put("value", map.get("name"));k2.put("color", "#173177");json.put("keyword2", k2);JSONObject k3 = new JSONObject();k3.put("value", map.get("time"));k3.put("color", "#173177");json.put("keyword3", k3);JSONObject k4 = new JSONObject();k4.put("value", map.get("content"));k4.put("color", "#173177");json.put("keyword4", k4);//具体模板信息内容好多个关键主要参数就写许多个 能查询手机微信微信小程序后台管理管理方法模板信息内容JSONObject jsonRemark = new JSONObject();jsonRemark.put("value", "请进入手机微信微信小程序进行审批");jsonRemark.put("color", "#173177");json.put("remark", jsonRemark);} catch (JSONException e) {e.printStackTrace();}return json;}/** * http乞求方法 * @param requestUrl * @param requestMethod * @param outputStr * @return */public  String httpsRequest(String requestUrl, String requestMethod, String outputStr){try {URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 设置乞求方式(GET/POST)conn.setRequestMethod(requestMethod);conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");// 当outputStr不因null时向输出流写数据信息信息内容if (null != outputStr) {OutputStream outputStream = conn.getOutputStream();// 注意序号文档文件格式outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 从输入流加载返回内容InputStream inputStream = conn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;StringBuffer buffer = new StringBuffer();while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}// 释放出来出去资源bufferedReader.close();inputStreamReader.close();inputStream.close();inputStream = null;conn.disconnect();return buffer.toString();} catch (ConnectException ce) {System.out.println("连接恳求请求超时:{}");} catch (Exception e) {System.out.println("https乞求出現出现异常:{}");}return null;}

-------------------------------------------------------------------------------------------------------------------------------------------

手机微信微信公众号信息消息推送到这儿就结束了(吐魂


经典著作权声明

即速应用倡导高度重视与维护保养技术专业专业知识产权年限期限。如发现本站文章内容內容存在经典著作权难点,烦请提供经典著作权疑虑、真正真实身份确认、经典著作所有权证实、 ,大伙儿将马上处理。本站文章内容內容仅作共享资源沟通交流沟通交流关键主要用途,写作者看法不一同于即速应用看法。顾客与写作者的一切交易与本站无关紧要,请悉知。


弥勒供电系统系统软件与手机上手机微信手机微信微信小程序促进智能化化交费协议书便签署 弥勒供电系统系统软件局邀请手机上手机微信手机微信微信小程序“融e电”开发设计设计方案商在我国工商局局金融业组织相关工作中中工作中工作人员学员学生就业实干际实际操作流程进行学习培训学习培训 1605581535 2020双十一,手机上手机微信手机微信微信小程序如何杀出重围占据生产制造制造行业盈利? 双十一即将到来,各种各样商家早已在十月中就早就摩拳擦掌了,相对性性能比过去双十一的盛况,今年手机微信微信小程序才华横溢变为电子器件商务接待生产制造制造行业重要的比赛场。根据阿拉丁指数值值报告预测分析剖析大伙儿能够看到,今年双十一手机微信微信小程序的广告宣传宣传策划运营经营规模将呈现爆发式提升,有去年18亿到今年的4六亿,提升做到250%。手机微信微信小程序电子器件商务接待将变为流量争夺的重要方法。 1605581327 在我国邮政于百度搜索检索App公布集寄件、查询非常于一身的著名知名品牌卡功效 一年一度的双11购物快乐按期而至,大伙儿在“抢货”的同时,无可避免导致由于退货货要想寄快递公司企业的规定。便于考虑到顾客在双十一前后左右上下猛增的快递公司企业规定,在我国邮政于百度搜索检索App公布集寄件、查询非常于一身的著名知名品牌卡功效,该功效由百度搜索检索智能化化手机微信微信小程序载重。 1604628430