Vueのマイクロチャンネル公衆数は全体のプロセスを共有します

私は、開発全体のプロセスについて非常に少数のレコードを共有するマイクロチャネル上Vueの情報、指導の多くの欠点。

ドキュメントのマイクロチャンネル公衆数が投稿されていません。

マイクロチャネルJS-SDKをダウンロード

NPMは、インストールを推奨しましたnpm install jweixin-module --save

共有ページ参照

var wx = require('jweixin-module') 

署名インターフェース(Javaのばねブート開発)の後端

コントローラ

@RequestMapping(value = "/wechat/getSignature",method = RequestMethod.POST)
public Result getSignature(HttpServletRequest request, HttpServletResponse response,
                           @RequestBody Signature signature,
                           @RequestParam(defaultValue = "") String callback) throws Exception {

    signature = wechatUtilsService.getSignature(signature);

    return ResultUtil.success(signature);
}
    

サービス

private String jsApiTicket = "";  
private Date expiredTime;

public Signature getSignature(Signature signature) throws Exception {
        //获取access_token
        Map<String,String> accessToken = wechatTokenService.getAccessToken();
        String access_token = accessToken.get("access_token"); //access_token 自己获取一下
        if (!StringUtils.isEmpty(access_token)){ 
            dealJsApiTicket( access_token); 
            if (!StringUtils.isEmpty(jsApiTicket)){ 
                String timeStamp = SignatureUtil.getTimeStamp();
                String nonce = SignatureUtil.getRandomStr();
                String url = signature.getUrl(); 
                String sign = SignatureUtil.createSignature(timeStamp, nonce, jsApiTicket, url); 
                signature.setNoncestr(nonce);
                signature.setTimestamp(timeStamp);
                signature.setSignature(sign);
                signature.setTicket(jsApiTicket); 
            }
        } 
        return signature;
    }
    private void dealJsApiTicket( String accessToken){
        if (StringUtils.isEmpty(jsApiTicket) || expiredTime.before(new Date())){
            jsApiTicket = getJsApiTicket(accessToken); 
            if (!StringUtils.isEmpty(jsApiTicket)){
                long currentTime = System.currentTimeMillis();
                currentTime += 120*60*1000;
                expiredTime = new Date(currentTime);
            }

        }
    }
    private String getJsApiTicket(String accessToken){ 
        JSONObject jsapiTicket = WXHttpUtil.HttpRequest4Blocking("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken+"&type=jsapi", "GET"); 
        return jsapiTicket.getString("ticket");
    }

その他のカテゴリー:

public class SignatureUtil {

	/**
	 * 创建SHA1签名
	 * @param params
	 * @return SHA1签名
	 */
	public static String createSignature(SortedMap<String, String> params) {

		System.out.println("string : " + sortParams(params));

		return sha1Encrypt(sortParams(params));
	}

	/**
	 * 创建SHA1签名
	 * @param timeStamp
	 * @param nonce
	 * @return SHA1签名
	 */
	public static String createSignature(String timeStamp, String nonce, String jsapi_ticket, String url) {
		SortedMap<String, String> signParams = new TreeMap<String, String>();
		signParams.put("jsapi_ticket", jsapi_ticket);
		signParams.put("noncestr", nonce);
		signParams.put("timestamp", timeStamp);
		signParams.put("url", url);
		return createSignature(signParams);
	}

	/**
	 * 使用SHA1算法对字符串进行加密
	 * @param str
	 * @return
	 */
	public static String sha1Encrypt(String str) {

		if (str == null || str.length() == 0) {
			return null;
		}

		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
				'a', 'b', 'c', 'd', 'e', 'f' };

		try {

			MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
			mdTemp.update(str.getBytes("UTF-8"));

			byte[] md = mdTemp.digest();
			int j = md.length;
			char buf[] = new char[j * 2];
			int k = 0;

			for (int i = 0; i < j; i++) {
				byte byte0 = md[i];
				buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
				buf[k++] = hexDigits[byte0 & 0xf];
			}

			return new String(buf);

		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 生成时间戳
	 * @return
	 */
	public static String getTimeStamp() {
		return String.valueOf(System.currentTimeMillis() / 1000);
	}

	/**
	 * 生成6位随机字符串
	 * @return
	 */
	public static String getRandomStr() {
		int length = 6;
		String base = "abcdefghijklmnopqrstuvwxyz0123456789";
		Random random = new Random();
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < length; i++) {
			int number = random.nextInt(base.length());
			sb.append(base.charAt(number));
		}
		return sb.toString();
	}

	/**
	 * 根据参数名称对参数进行字典排序
	 * @param params
	 * @return
	 */
	private static String sortParams(SortedMap<String, String> params) {
		StringBuffer sb = new StringBuffer();
		Set<Entry<String, String>> es = params.entrySet();
		Iterator<Entry<String, String>> it = es.iterator();
		while (it.hasNext()) {
			Entry<String, String> entry = it.next();
			String k = entry.getKey();
			String v = entry.getValue();
			sb.append(k + "=" + v + "&");
		}
		return sb.substring(0, sb.lastIndexOf("&"));
	}

	public static void main(String[] args) throws Exception {
		String jsapi = "c4db7f5867a6290378cf24429f2803da0516a788";
		String url = "https://qasp.yhcrm.cn/chat/sspf/index.html";
		String timeStamp = getTimeStamp();
		String nonce = getRandomStr();
		String sign = createSignature(timeStamp, nonce, jsapi, url);
		System.out.println("timeStamp:"+timeStamp);
		System.out.println("nonce:"+nonce);
		System.out.println("signature:" + sign);
	}

}
public class WXHttpUtil {

	private WXHttpUtil() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * HttpRequest 请求结果回调接口
	 */
	public static interface HttpResponse {

		/**
		 * 请求成功
		 * 
		 * @param object
		 *            JSONObject
		 */
		void onOk(JSONObject object);

		/**
		 * 请求失败
		 * 
		 * @param cause
		 *            异常
		 */
		void onError(Throwable cause);
	}

	/**
	 * 发起网络请求-异步式
	 * 
	 * @param requestUrl
	 *            请求地址
	 * @param requestMethod
	 *            请求方式(GET、POST)
	 * @param resp
	 *            请求结果回调
	 */
	public static void HttpRequest(String requestUrl, String requestMethod,
			HttpResponse resp) {
		HttpRequest(requestUrl, requestMethod, null, resp);
	}

	/**
	 * 发起网络请求-异步式
	 * 
	 * @param requestUrl
	 *            请求地址
	 * @param requestMethod
	 *            请求方式(GET、POST)
	 * @param outputStr
	 *            提交的数据
	 * @param resp
	 *            请求结果回调
	 */
	public static void HttpRequest(String requestUrl, String requestMethod,
			String outputStr, HttpResponse resp) {

		try {

			// buffer 缓冲流
			StringBuffer buffer = new StringBuffer();
			// 建立连接
			URL url = new URL(requestUrl);
			// 获取 HttpURLConnection对象
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			// 设置输出流
			connection.setDoOutput(true);
			// 设置输入流
			connection.setDoInput(true);
			// 是否使用缓存
			connection.setUseCaches(false);
			// 请求方式
			connection.setRequestMethod(requestMethod);

			// 流不为空
			if (outputStr != null) {
				// 获取流
				OutputStream out = connection.getOutputStream();
				// 写数据流 UTF-8 编码
				out.write(outputStr.getBytes("UTF-8"));
				// 关闭
				out.close();
			}

			// 流处理
			InputStream input = connection.getInputStream();
			// 读取流 UTF-8 编码
			InputStreamReader inputReader = new InputStreamReader(input,
					"UTF-8");
			// 缓冲流 buffer
			BufferedReader reader = new BufferedReader(inputReader);

			// 定义 String
			String line;
			// 循环读取每一行,知道数据没有了,意思是读取完了
			while ((line = reader.readLine()) != null) {
				// 添加到StringBuffer字符流里面
				buffer.append(line);
			}

			// 关闭连接、释放资源
			reader.close();
			// 关闭
			inputReader.close();
			// 关闭
			input.close();
			// 释放、待gc
			input = null;
			// 关闭连接
			connection.disconnect();

			if (resp != null)
				resp.onOk(JSONObject.parseObject(buffer.toString()));

		} catch (Exception e) {

			if (resp != null)
				resp.onError(e.getCause());
		}

	}

	/**
	 * 发起网络请求-阻塞式
	 * 
	 * @param requestUrl
	 *            请求地址
	 * @param requestMethod
	 *            请求方式(GET、POST)
	 * @return JSONObject
	 */
	public static JSONObject HttpRequest4Blocking(String requestUrl,
                                                  String requestMethod) {
		return HttpRequest4Blocking(requestUrl, requestMethod, null);
	}

	/**
	 * 发起网络请求-阻塞式
	 * 
	 * @param requestUrl
	 *            请求地址
	 * @param requestMethod
	 *            请求方式(GET、POST)
	 * @param outputStr
	 *            提交的数据
	 * @return JSONObject
	 */
	public static JSONObject HttpRequest4Blocking(String requestUrl,
                                                  String requestMethod, String outputStr) {

		try {

			// buffer 缓冲流
			StringBuffer buffer = new StringBuffer();
			// 建立连接
			URL url = new URL(requestUrl);
			// 获取 HttpURLConnection对象
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			// 设置输出流
			connection.setDoOutput(true);
			// 设置输入流
			connection.setDoInput(true);
			// 是否使用缓存
			connection.setUseCaches(false);
			// 请求方式
			connection.setRequestMethod(requestMethod);

			// 流不为空
			if (outputStr != null) {
				// 获取流
				OutputStream out = connection.getOutputStream();
				// 写数据流 UTF-8 编码
				out.write(outputStr.getBytes("UTF-8"));
				// 关闭
				out.close();
			}

			// 流处理
			InputStream input = connection.getInputStream();
			// 读取流 UTF-8 编码
			InputStreamReader inputReader = new InputStreamReader(input,
					"UTF-8");
			// 缓冲流 buffer
			BufferedReader reader = new BufferedReader(inputReader);

			// 定义 String
			String line;
			// 循环读取每一行,知道数据没有了,意思是读取完了
			while ((line = reader.readLine()) != null) {
				// 添加到StringBuffer字符流里面
				buffer.append(line);
			}

			// 关闭连接、释放资源
			reader.close();
			// 关闭
			inputReader.close();
			// 关闭
			input.close();
			// 释放、待gc
			input = null;
			// 关闭连接
			connection.disconnect();

			return JSONObject.parseObject(buffer.toString());

		} catch (Exception e) {
			System.out.println(e.getCause().toString());
		}

		return null;
	}

	/**
	 * 根据内容类型判断文件扩展名
	 * 
	 * @param contentType
	 *            内容类型
	 * @return 文件扩展名
	 */
	public static String getFileEndWitsh(String contentType) {

		String fileEndWitsh = "";

		if ("image/jpeg".equals(contentType))
			fileEndWitsh = ".jpg";
		else if ("image/png".equals(contentType))
			fileEndWitsh = ".png";
		else if ("audio/mpeg".equals(contentType))
			fileEndWitsh = ".mp3";
		else if ("audio/amr".equals(contentType))
			fileEndWitsh = ".amr";
		else if ("video/mp4".equals(contentType))
			fileEndWitsh = ".mp4";
		else if ("video/mpeg4".equals(contentType))
			fileEndWitsh = ".mp4";
		else if ("voice/amr".equals(contentType))
			fileEndWitsh = ".amr";
		else if (contentType.startsWith("application")) {
			fileEndWitsh = contentType.substring(
					contentType.lastIndexOf("/") + 1,
					(contentType.contains(";") ? contentType.lastIndexOf(";")
							: contentType.length())).trim();
			if (!fileEndWitsh.equals("json"))
				fileEndWitsh = "." + fileEndWitsh;
		}

		return fileEndWitsh;
	}

	/**
	 * 将url进行urlencode编码
	 * 
	 * @param str
	 *            被编码的url
	 * @return 编码后的url
	 */
	public static String URLEncoder(String str) {
		String result = str;
		try {
			result = java.net.URLEncoder.encode(result, "UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}
@Data
public class Signature implements Serializable {

    private String noncestr;

    private String signature;

    private String timestamp;

    private String ticket;

    private String url;
}

バックエンドのコードそんなに。

リクエストインターフェイス

uni.request({
				url:"/wechat/getSignature",
				method:"POST",
				data:{
					url: window.location.href
				},
				success: (res) => { 
					var signature = res.data.data
					wx.config({
						beta: true,
						debug: false,
						appId: "appid",
						timestamp: signature.timestamp,
						nonceStr: signature.noncestr,
						signature: signature.signature,
						jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']
					}); 
				}
			})

共有の初期化方法:

wx.ready(function(){
	wx.onMenuShareAppMessage({ 
		title: "",
		desc: "",
		link: '',
		imgUrl: '',
		success: function (res) {
		}
	}) ,
	wx.onMenuShareTimeline({
	  title: '', 
	  link: '',  
	  imgUrl: '',  
	  success: function () { 
	  }
	})
});

完全なコードのフロントエンド:

<template> 
	<view style="width: auto;height:auto;">
		 <image src="../../static/share.png" style="width: 100%;height: 100%;" mode='widthFix'></image>
	</view> 
</template> 
<script>
	var wx = require('jweixin-module')   
	export default { 
		data() {
			return { 
			}
		},
		onLoad(options) { 
			uni.request({
				url:"/wechat/getSignature", 
				method:"POST",
				data:{
					url: window.location.href
				},
				success: (res) => { 
					var signature = res.data.data
					wx.config({
						beta: true,
						debug: false,
						appId: "appid",
						timestamp: signature.timestamp,
						nonceStr: signature.noncestr,
						signature: signature.signature,
						jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']
					}); 
				}
			})
			wx.ready(function(){
				wx.onMenuShareAppMessage({ 
					title: "",
					desc: "",
					link: '',
					imgUrl: '',
					success: function (res) {
					}
				}) ,
				wx.onMenuShareTimeline({
				  title: '', 
				  link: '',  
				  imgUrl: '',  
				  success: function () { 
				  }
				})
			});
		},
		methods:{
		 }
	}
</script>

<style>
</style>

終わり!!!

公開された24元の記事 ウォン称賛11 ビュー5402

おすすめ

転載: blog.csdn.net/weixin_44037376/article/details/100988885