微信小程式訊息推送。可推送給他人
首先是Java中的工具類
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import net.sf.json.JSONObject; /** * https工具類 * @author Administrator * */ public class CommonUtil { 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; } public static String httpRequest(String requestUrl, String requestMethod, String outputStr) { StringBuffer buffer = new StringBuffer(); try { URL url = new URL(requestUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); 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 buffer.toString(); } public static String urlEncodeUTF8(String source){ String result = source; try { result = java.net.URLEncoder.encode(source,"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } public static String httpsRequestForStr(String requestUrl, String requestMethod, String outputStr) { String result=""; 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(); result=buffer.toString(); } catch (ConnectException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return result; } }
因為https請求在上線後不是合法域名,所以只能通過服務端傳送請求
/** * @category 得到token */ public Map<String, Object> getToken(String appId,String secret){ String url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" +secret; JSONObject jo=JSONObject.fromObject(CommonUtil.httpsRequest(url, "GET",null)); Map map=jo; return jo; } /** * @category 得到openid */ public Map<String, Object> getOpenId(String appId,String secret,String code){ String url="https://api.weixin.qq.com/sns/jscode2session?appid="+appId+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"; JSONObject jo=JSONObject.fromObject(CommonUtil.httpsRequest(url, "GET",null)); Map map=jo; return map; } /** *@category 儲存openid */ @Override public ResultValue<UserVO> saveOpen(Long id, String openid)throws Exception { ResultValue<UserVO> rv = new ResultValue<UserVO>(); UserVO user = userDao.findByIdAndDr(id, BdRefConstant.DR_ACTIVE); user.setOpenid(openid); user.setTs(TimeUtil.getCurTS()); userDao.save(user); rv.setSuccess(true); return rv; } /** * @category 傳送 */ public Map<String, Object> sendMsg(String token,String msg){ String url="https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token="+token; JSONObject jo=JSONObject.fromObject(CommonUtil.httpsRequest(url, "POST",msg)); Map map=jo; return map; }
通過這幾個方法基本上就可以實現訊息模板的傳送了。
我是直接將formid與openid存入到資料庫表當中。通過改變狀態0,1來判斷是否使用。
傳送訊息模板有許多種方法,我弄了幾天,感覺這個最簡單。還可以存入redis,當然這個我還沒有研究。
package com.yun.service.wxkey; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.apache.commons.validator.Var; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.yun.dao.pub.DynQryDao; import com.yun.dao.wxkey.WxKeyDao; import com.yun.model.pub.result.ResultValue; import com.yun.model.user.UserVO; import com.yun.model.wxkey.WxKeyVO; import com.yun.pub.constant.BdRefConstant; import com.yun.pub.util.BTool; import com.yun.pub.util.TimeUtil; @Transactional @Service("WxKeyService") public class WxKeyServiceImp implements WxKeyService { @Autowired private WxKeyDao wxDao; @Autowired private DynQryDao dqdao; private EntityManager entityManager; @PersistenceContext public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } protected EntityManager getEntityManager() { return entityManager; } /** * @category 通過userid查詢formid * @Override */ public ResultValue<WxKeyVO> findFormId(String userid) { ResultValue<WxKeyVO> rt=new ResultValue<WxKeyVO>(); String msg=""; if(BTool.isEmpty(userid)){ msg += "新增問題資訊不能為空!"; rt.setMsg(msg); System.out.println(userid); return rt; }else{ List<Map<String, Object>> WxBack = dqdao .findBySql(wxDao.findSame + " and d.id in (" +userid+") and c.state='"+BdRefConstant.WX_SAVE+"' group by d.id"); rt.setMapList(WxBack); } return rt; } /** * @category 新增formid * @Override */ @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackForClassName = "Exception") public ResultValue<WxKeyVO> save(WxKeyVO wk) { ResultValue<WxKeyVO> rt=new ResultValue<WxKeyVO>(); String msg=""; if (BTool.isEmpty(wk)) { msg += "新增問題資訊不能為空!"; rt.setMsg(msg); return rt; } else { msg += "新增成功!"; wk.setState(BdRefConstant.WX_SAVE); wk.setTs(TimeUtil.getCurTS()); WxKeyVO save = wxDao.save(wk); if (!BTool.isEmpty(save)) { rt.setSuccess(true); rt.setMsg(msg); } else { rt.setMsg("儲存失敗!"); } } return rt; } /** * @throws Exception * @category 通過formid刪除 * @Override */ public ResultValue<WxKeyVO> delByFormId(String formid) throws Exception { ResultValue<WxKeyVO> rt=new ResultValue<WxKeyVO>(); String msg=""; WxKeyVO wk = wxDao.findByFormid(formid); if(BTool.isEmpty(wk)){ msg += "刪除失敗!"; rt.setMsg(msg); return rt; }else{ msg+="刪除成功!"; wk.setState(BdRefConstant.WX_END); wk.setTs(TimeUtil.getCurTS()); WxKeyVO save = wxDao.save(wk); if (!BTool.isEmpty(save)) { rt.setSuccess(true); rt.setMsg(msg); } else { rt.setMsg("刪除失敗!"); } } return rt; } }
相關推薦
微信小程式訊息推送。可推送給他人
首先是Java中的工具類 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputSt
微信小程式——訊息推送配置
第一步:官網下載對應版本的cryptoDemo下載地址:https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip第二步:建立檢查檔案wxcheck.php這個檔名可以隨便命名,要保證url中檢查的檔名與之相同即可。<?
微信小程式--訊息推送配置Token令牌錯誤校驗失敗如何解決
<h1 id="微信小程式訊息推送配置token令牌錯誤" style="margin: 0.8em 0px; padding: 0px; box-sizing: border-box; font-weight: 100; line-height: 1.3em;">[微信小程式]訊息推送配置T
微信小程式訊息推送伺服器接入
1、訊息轉發地址填寫,需要注意的是token和encodingaeskey要和專案中配置一致2、URL要實現兩個路由相同的方法但是一個需要時GET另一個是POST,如下,其中TOKEN引數需要與微信後臺配置一致; @ResponseBody @RequestMappin
微信小程式訊息推送
模版訊息推送是微信小程式採用的通知形式, 使用者本人在小程式頁面有互動行為後,可觸發下發通知 ,通過微信聊天列表中的服務通知可快捷進入檢視訊息。此外,點選檢視詳情還能跳轉到下發訊息的小程式的指定頁面。但是為了避免這種通知被濫用,帶來不好的使用者體驗,小程式也
微信小程式訊息通知-打卡考勤
微信小程式訊息通知-打卡考勤 效果: 稍微改一下js就行,有不必要的錯誤,我就不改了,哈哈! index.js //index.js const app = getApp() // 填寫微信小程式appid var appid =
微信小程式-訊息提示框
微信小程式開發中toast也是重要的訊息提示方式. 提示框: wx.showToast(OBJECT) 顯示訊息提示框 OBJECT引數說明: 示例程式碼: ? 1 2 3 4 5 wx.showTo
微信小程式-訊息提示框例項
做Android的時候對toast是很熟悉的.微信小程式開發中toast也是重要的訊息提示方式. 提示框: wx.showToast(OBJECT) 顯示訊息提示框 OBJECT引數說明: 示例程式碼: wx.showToast({ title: '成功', icon
100多個微信小程式程式碼免費送
所有資源均來自網際網路公開渠道蒐集,僅供學習交流之用,版權歸原作者所有。連結: https://pan.baidu.com/s/1PyFC-v9bDdZRBsVXJwyalg 密碼: 8834補充:微信小程式官方Demo(Hao-Wu/WeApp-Demo)微信小應用示例程式
微信小程式中使用Echarts(可非同步請求資料)
在微信小程式中使用Echarts,主要分為以下幾步: 1.首先要下載ecomfe/echarts-for-weixin專案,下載後將ec-canvas資料夾複製到小程式專案中,假設放在根目錄下utils資料夾中。 2.在要實現echarts圖的頁面引入echarts.js檔案,例如要在i
微信小程式 新建專案並配置可執行的檔案目錄
新建專案 下載微信小程式開發者客戶端並開啟,選擇專案目錄和專案名稱,填入AppID,取消勾選快速啟動模板。 1. 新建全域性配置檔案 點選目錄左上角的+,新建字尾名為js, json, wxss(命名自定,如app.js)檔案,用
微信小程式 tab選項卡,可點選,可滑動
看下效果圖: <view class="swiper-tab"> <view class="swiper-tab-item {{currentTab==0?'active':''}}" data-current="0" bindtap="cli
微信小程式之訊息推送配置Token驗證失敗-已解決
微信小程式配置訊息推送的時候一般都會出現Token驗證失敗的問題,這個錯誤是因為,你的介面頁面還沒有反饋正確的資訊給微信介面,網友們也給出了一些解決方法,但有些能夠配置成功,有些則不然。下面給出網友提供的2種比較容易配置成功的php介面驗證程式碼。 把程式碼放到可訪問的地址
微信小程式模板訊息推送
前言 這只是模擬一下,訊息模板功能的實現,前臺只需要蒐集fromid傳給後臺就可以, 一個fromid可以給使用者傳送一個模板訊息,有效期為7天, 一.新增訊息模板
突破微信小程式模板訊息的推送限制
“模版訊息”是小程式非常重要且可主動觸達使用者的一種能力。愛鮮蜂小程式通過“模版訊息”,建立一套使用者喚醒機制,達到提升使用者復購率的目的。小打卡小程式的近30天訪問來源資料顯示,有20%左右的使用者通過模板訊息這個入口進入小打卡,在各種來源中排名第三位,可見模板訊息
微信小程式--form表單訊息推送
小程式實現向用戶發推送訊息,需要前端傳formid給後臺。後臺便可以實現訊息推送。那麼formid怎麼獲取呢? formid 肯定是寫在form表單中的,通過button按鈕觸發,一個簡單的例子: <form bindsubmit="formSubmit" report-submit="true" &
微信小程式模板訊息群發、無限制推送相關講解
模版訊息推送是微信小程式採用的通知形式,使用者本人在小程式頁面有互動行為後,可觸發下發通知,通過微信聊天列表中的服務通知可快捷進入檢視訊息。此外,點選檢視詳情還能跳轉到下發訊息的小程式的指定頁面。但是為了避免這種通知被濫用,帶來不好的使用者體驗,小程式也對模板訊息推送做了相應
微信小程式之傳送模板訊息(通過openid推送訊息給使用者)
一、獲取access_token access_token是介面呼叫的憑證,目前有效期為兩個小時,需要定時重新整理,重複獲取將導致上次獲取的access_token失效。(注:不建議每次呼叫需要acc
vPush 專業高效實用的微信小程式推送平臺
古人云vPush-SDK 連結: https://pan.baidu.com/s/1QKXi1WapqfvO5BUlolcBs
在應用中顯示的圖片很多情況不滿足業務需求,我們需要動態根據圖片的寬高進行縮放或載入中顯示的預設圖片,這是我沒就需要監聽圖片載入完成回撥,來看看微信小程式怎麼實現圖片載入完成回撥。
<swiper-item> <image src="{{item.image}}" class="slide-image" mode="widthFix" @tap="bannerjump({{item.l