微信分享功能开发

1.H5页面配置

(1)引入微信JS SDK

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

(2)在js里配置接口参数

wx.config({
		debug : false,//这里是开启测试,如果设置为true,则打开每个步骤,都会有提示,是否成功或者失败
		appId : ‘${appid}‘,
		timestamp : ‘${timestamp}‘,
		nonceStr : ‘${nonceStr}‘,
		signature : ‘${signature}‘,
		jsApiList : [
		// 所有要调用的 API 都要加到这个列表中
		‘onMenuShareTimeline‘,"onMenuShareAppMessage","onMenuShareQQ","hideMenuItems"]
	});

	var strTiele="";
	var strDesc="";
	var strLink="url";
	var strImgUrl="图片路径";
	wx.ready(function() {
		// 1 判断当前版本是否支持指定 JS 接口,支持批量判断
		wx.checkJsApi({
			jsApiList : [‘"hideMenuItems"‘,‘onMenuShareTimeline‘,‘onMenuShareAppMessage‘,"onMenuShareQQ"],

		});

		//隐藏QQ空间分享,QQ浏览器,safari
		wx.hideMenuItems({
			menuList: ["menuItem:share:QZone","menuItem:openWithSafari","menuItem:openWithQQBrowser"]
		});

		//分享朋友圈
		wx.onMenuShareTimeline({
			title : strTiele, // 分享标题
			 desc : strDesc,//分享描述
			 link : strLink, // 分享链接
			imgUrl: strImgUrl,// 分享图标 

		});

		//分享给微信好友
		wx.onMenuShareAppMessage({
			title : strTiele, // 分享标题
			 desc : strDesc,//分享描述
			 link : strLink, // 分享链接
			imgUrl: strImgUrl,// 分享图标
		});

		//分享到QQ
		wx.onMenuShareQQ({
			title : strTiele, // 分享标题
			 desc : strDesc,//分享描述
			 link : strLink, // 分享链接
			imgUrl: strImgUrl,// 分享图标
		});

 2.ACTION 类设置

String params = PastUtil.getParam("wx05a97b02437b983d","2a5ea68d9679b0de1ad09de72e4159fe");

		JSONObject jsonObject = new JSONObject(params);
		this.setResult("appid", jsonObject.get("appid"));
		this.setResult("url", jsonObject.get("url"));
		this.setResult("jsapi_ticket", jsonObject.get("jsapi_ticket"));
		this.setResult("timestamp", jsonObject.get("timestamp"));
		this.setResult("nonceStr", jsonObject.get("nonceStr"));
		this.setResult("signature", jsonObject.get("signature"));

Pastutil 类

public class PastUtil {
    public static String token = null;
    public static String time = null;
    public static String jsapi_ticket = null;
    public static String url = null ;
    /**
     *
     * @param appId   公账号appId
     * @param appSecret
     * @param url    当前网页的URL,不包含#及其后面部分
     * @return
     */
    public static String getParam(String appId,String appSecret){
        if(token == null){
            token = CommonUtil.getToken(appId, appSecret);
            jsapi_ticket = CommonUtil.getJsApiTicket(token);
            time = getTime();
        }else{
            if(!time.substring(0, 13).equals(getTime().substring(0, 13))){ //每小时刷新一次
                token = null;
                token = CommonUtil.getToken(appId, appSecret);
                jsapi_ticket = CommonUtil.getJsApiTicket(token);
                time = getTime();
            }
        }

        String url = getUrl();

        Map<String, String> params = sign(jsapi_ticket, url);
        params.put("appid", appId);

        JSONObject jsonObject = JSONObject.fromObject(params);
        String jsonStr = jsonObject.toString();
        System.out.println(jsonStr);
        return jsonStr;
    }

    private static String getUrl(){
    	HttpServletRequest request = ActionContext.getActionContext().getRequest();
        //StringBuffer requestUrl = request.getRequestURL();

    	System.out.println(request.getServerName());
    	//如果你的微信后台端口是80的话,一定不能把HTTP_HOST也拼接到url上面去,否则签名失败
		String share2FirendUrl = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getRequestURI();
		System.out.println(share2FirendUrl);

		//带参数的url拼接
		if(StringUtils.isNotBlank(request.getQueryString())){
			share2FirendUrl +=  "?"+request.getQueryString();
		}
		System.out.println("share2FirendUrl\n\n"+share2FirendUrl+"\n\n");
        return share2FirendUrl;
    }

    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 str;
        String signature = "";

        //注意这里参数名必须全部小写,且必须有序
        str = "jsapi_ticket=" + jsapi_ticket +
                  "&noncestr=" + nonce_str +
                  "&timestamp=" + timestamp +
                  "&url=" + url;

        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(str.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);
    }

    //获取当前系统时间 用来判断access_token是否过期
    public static String getTime(){
        Date dt=new Date();
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(dt);
    }

    public static void main(String[] args){
    	PastUtil.url = "http://m.e7560.com/" ;
    	System.out.println(getParam("wx973e01320ce8ebb6","1f7f1ac16dfaf7bd6e087b3831e1bbe2"));
    }
}

  

时间: 2024-07-29 20:04:57

微信分享功能开发的相关文章

微信分享功能开发代码整理

微信分享对接php项目: 做微信分享开发要注意所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名” 1,Jssdk类包的引入Jssdk.class.php生成注册微信官方分享按钮的权限参数,代码如下: <?php // +---------------------------------------------------------------------- // | 微信分享核心包类 // +--------

微信开发】【Asp.net MVC】-- 微信分享功能

[微信开发][Asp.net MVC]-- 微信分享功能 2017-01-15 09:09 by stoneniqiu, 12886 阅读, 15 评论, 收藏, 编辑 内嵌在微信中的网页,右上角都会有一个默认的分享功能.如下图所示,第一个为自定义的效果,第二个为默认的效果.实现了自定义的分享链接是不是更让人有点击的欲望?下面讲解下开发的过程. 一.准备,设置js接口安全域名 这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-->JS接口安全域名.打开这个页

Android微信分享功能实例+demo

Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留言  o(∩_∩)o 哈哈 代码如下: package com.wx; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import a

[5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)

1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按钮时,执行一个Ajax到后台 后台通过前台的部分信息(如商品名额,金额等),将其组装成符合微信要求格式的xml,然后调用微信的"统一下单接口" 调用成功后微信会返回一个组装好的xml,我们提取之中的消息(预支付id也在其中)以JSON形式返回给前台 前台将该JSON传参给微信内置JS的方法

js-sdk微信分享功能的实现(vue)

代码 mounted(){ //在mounted里执行 let ua = navigator.userAgent.toLowerCase(); //判断是否是微信端 if (ua.match(/MicroMessenger/i) == "micromessenger") { this.getWxShare() } } methods:{ getWxShare(){ let url = window.location.href.split('#')[0] axios.get(`${com

【微信开发】【Asp.net MVC】-- 微信分享功能

内嵌在微信中的网页,右上角都会有一个默认的分享功能.如下图所示,第一个为自定义的效果,第二个为默认的效果.实现了自定义的分享链接是不是更让人有点击的欲望?下面讲解下开发的过程. 一.准备,设置js接口安全域名 这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-->JS接口安全域名.打开这个页面之后你会看到下面的提示.需要先下载这个文件并上传到指定域名的根目录. 这个文件里面是一个字符串,从名称看是用来校验用的.先上传了这个文件,你才能保存成功.这样你就可以使

微信二次分享功能开发笔记

最近的一个项目在进行二次分享的时候出现了问题,定制的文案描述及图片都不能在分享后出现,如图所示: 经过十八般折腾,终于变成我想要的样式了,如图:    下面讲讲具体如何实现的. 首先,明白我们的需求是使由app分享到微信后的页面可以使用微信的二次分享功能做定制化的分享(如图所示) 然后开始着手做相关功能开发. 根据微信开发文档,知晓我们需要调用微信的api,获取对应的分享功能(朋友.朋友圈.qq)等,还需要一个对应的公众号或者服务号.理清思路后,接下来介绍关于各部分的具体处理,见下: 本地代码处

微信开发(一)基于Wx-java的微信分享功能

最近在做微信服务号开发,简单总结一下,便于自己学习积累和分享给大家: 环境介绍: Spring+ Spring MVC +Mybatis 开发语言: JAVA 微信公众平台的开发中,微信只公布了一个基于Http协议的接口和加解密的算法sdk,在开发的过程中可以自己根据需求来配置数据,调用相关接口,也可以引用比较成熟的基于java语言的微信公众号sdk.笔者引用的是目前比较流行的 weixin-java-tools 可以参考:点击打开链接 项目中引入了weixin-java-mp 就可直接调用相关

ionic微信分享功能实例

最近的项目有分享的需求,在网上找了很多关于分享功能的介绍,这边介绍一个demo(xuli大神所写),也算是对于这项功能的一个总结吧. 一.先生成一个apk包 具体可以直接下载xuli大神的代码git clone https://github.com/xu-li/cordova-plugin-wechat-example.git 然后打包apk. 二.根据apk包生成签名 下载签名工具,将apk安装到安卓手机中,在项目config.xml文件中找到包名,将包名输入到签名工具GenSignature