JAVA H5微信分享


一、前台代碼:

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
$(function(){
var str = $(window).height();
$('#btn').css("margin-top",str*0.58);
$('#Layer1').css("margin-top",str*0.06);
})


wx.config({
// debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
appId: '${map.appId}', // 必填,公眾號的唯一標識
timestamp: '${map.timestamp}', // 必填,生成簽名的時間戳
nonceStr: '${map.nonceStr}', // 必填,生成簽名的隨機串
signature: '${map.signature}',// 必填,簽名,見附錄1
jsApiList: [
'onMenuShareAppMessage'
] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
});

wx.ready(function(){

var sdata = {
title: '下載xxapp',
desc: '移動xxAPP上線拉快來下載呀!!',
link: 'http://www.xx.com/operation/mybusi/barcode',
imgUrl: 'http://www.xx.com/images/h5/microcode/60.png',
success: function () {
// alert('用戶確認分享后執行的回調函數');
},
cancel: function () {
// alert('用戶取消分享后執行的回調函數');
}
};

// config信息驗證后會執行ready方法,所有接口調用都必須在config接口獲得結果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。
wx.onMenuShareAppMessage(sdata);
});

</script>
View Code

 

二、java后台代碼:

package com.unionpay.acp.sdk;

import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;

import net.sf.json.JSONObject;

import com.xx.common.config.Global;
import com.unionpay.acp.sdk.HttpClient;

/**
* 微信分享簽名
*
*/
public class Sign {
public static void main(String[] args) {
// String jsapi_ticket = "kgt8ON7yVITDhtdwci0qecRXz9HyXuyXgIslzmd3ri0s5EnLrVZZfrPJotRfKWQ-TTuQ2ZMAK86GUlWF1PHhcg";
};

public static Map<String, String> getResult(){

// String jsapi_ticket = getTicket();
// 注意 URL 一定要動態獲取,不能 hardcode
String url = "http://www.xx.com/operation/mybusi/barcode";
// String url = Global.getConfig("wx.shareUrl");
Map<String, String> ret = sign(getTicket(), url);
ret.put("appId", getAppId());
return ret;
}

private static String getAppId(){
return Global.getConfig("wx.appid");
}

private static String getToken(){

String accessToken = "";
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+getAppId()+"&secret="+Global.getConfig("wx.secret");
HttpClient hc = new HttpClient(url, 30000, 30000);
try {
int status = hc.sendGet("utf-8");
if (200 == status) {
String resultString = hc.getResult();
if (null != resultString && !"".equals(resultString)) {
JSONObject json = JSONObject.fromObject(resultString);
if (null==json.get("errcode")){
accessToken = json.get("access_token").toString();
} else {
System.out.println(resultString);
}
}
}else{
System.out.println("返回http狀態碼["+status+"],請檢查請求報文或者請求地址是否正確");
}
} catch (Exception e) {
e.printStackTrace();
}
return accessToken;
}

private static String getTicket(){

String ticket = "";
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+getToken()+"&type=jsapi";
HttpClient hc = new HttpClient(url, 30000, 30000);
try {
int status = hc.sendGet("utf-8");
if (200 == status) {
String resultString = hc.getResult();
if (null != resultString && !"".equals(resultString)) {

JSONObject json = JSONObject.fromObject(resultString);
if ("0".equals(json.getString("errcode"))){
ticket = json.getString("ticket");
} else {
System.out.println(resultString);
}
}
}else{
System.out.println("返回http狀態碼["+status+"],請檢查請求報文或者請求地址是否正確");
}
} catch (Exception e) {
e.printStackTrace();
}
return ticket;
}

public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";

//注意這里參數名必須全部小寫,且必須有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"&timestamp=" + timestamp +
"&url=" + url;
System.out.println(string1);

try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}

ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);

return ret;
}

private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}

private static String create_nonce_str() {
return UUID.randomUUID().toString();
}

private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM