1. 程式人生 > >微信小程式訊息推送。可推送給他人

微信小程式訊息推送。可推送給他人

首先是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