微信分享SDK开发

最近帮人做一个微商城,涉及到了分享团购的功能,所以看了下微信的分享接口,具体的微信api已经很详细了,但是获取最关键的签名还是比较坑人的,主要耽误时间的地方就是在如果获取签名了。
废话不多说了,现在就把自己的代码贴出来供大家参考一下。一直想学PHP,但是太懒了,下面是java的。
下面是后端用来获取签名signature的方法:

@Controller
@RequestMapping(value="/weiXinApi")
public class WeiXinApi{

    @RequestMapping(value="/getWxConfig")
    @ResponseBody
    public Object getWxConfig(HttpServletRequest request){
        Map ret = new HashMap();
        String appId = WeiXinConstant.PAYAPPIDID; // 必填,公众号的唯一标识
        String secret = WeiXinConstant.APPSECRET; 
        String requestUrl = request.getParameter("url");
        String access_token = "";
        String jsapi_ticket = "";
        String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
        String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+secret;
        JSONObject json = WeiXinUtil.httpRequest(url, "GET", null);
        if (json != null) {
            access_token = json.getString("access_token");
            url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi";
            json = WeiXinUtil.httpRequest(url, "GET", null);
            if (json != null) {
                jsapi_ticket = json.getString("ticket");
            }           
        }
        String signature = "";
         //注意这里参数名必须全部小写,且必须有序
        String[] paramArr = new String[] { "jsapi_ticket=" + jsapi_ticket, "noncestr=" + nonceStr,
                "timestamp=" + timestamp,  "url=" + requestUrl };
        Arrays.sort(paramArr);
        // 将排序后的结果拼接成一个字符串
        String sign = paramArr[0].concat("&"+paramArr[1]).concat("&"+paramArr[2])
                .concat("&"+paramArr[3]);
        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(sign.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
        }catch (NoSuchAlgorithmException e){
            e.printStackTrace();
        }catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
        ret.put("appId", appId);
        ret.put("timestamp", timestamp);
        ret.put("nonceStr", nonceStr);
        ret.put("signature", signature);
        return ret;
    }
}

下面是前端的js

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ include file="../../common/taglibs.jsp"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport"
    content="width=device-width,initial-scale=1,minimum-scale=1, maximum-scale=1, user-scalable=no" />
<meta name="format-detection" content="telephone=no,email=no" />
<meta name="full-screen" content="yes">
<title>微信分享</title>
</head>
<body id="specific-group" onload="getConfig()" >
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script type="text/javascript" charset="utf-8">
        function getConfig(){
            var url = location.href.split('#')[0]; 
            $.ajax({
                url:"${cxt}/weiXinApi/getWxConfig.action",
                dataType : "json",  
                async : false,  
                data:{url:url},  
                success : function(data) {  
                    wx.config({  
                        debug: true,  
                        appId: data.appId,  
                        timestamp: data.timestamp,  
                        nonceStr: data.nonceStr,  
                        signature: data.signature,          
                        jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage',
                                    'onMenuShareQQ', 'onMenuShareWeibo' ]
                    });  

                  //修改这里
                    var shareData = {
                        title : "",
                        link : "",
                        img_url : "",
                        desc : ""
                    };

                    //所有微信事件都要写到ready里
                    wx.ready(function() {
                        //分享给朋友
                        wx.onMenuShareAppMessage({
                            title : shareData.title,
                            desc : shareData.desc,
                            link : shareData.link,
                            imgUrl : shareData.img_url,
                            trigger : function(res) {
                                alert('用户点击发送给朋友');
                            },
                            success : function(res) {
                                alert('已分享');
                            },
                            cancel : function(res) {
                                alert('已取消');
                            },
                            fail : function(res) {
                                alert(JSON.stringify(res));
                            }
                        });

                        //分享到朋友圈,注意去掉回调里的alert
                        wx.onMenuShareTimeline({
                            title : shareData.title,
                            desc : shareData.desc,
                            link : shareData.link,
                            imgUrl : shareData.img_url,
                            trigger : function(res) {
                                alert('用户点击分享到朋友圈');
                            },
                            success : function(res) {
                                alert('已分享');
                            },
                            cancel : function(res) {
                                alert('已取消');
                            },
                            fail : function(res) {
                                alert(JSON.stringify(res));
                            }
                        });
                        //分享到QQ
                        wx.onMenuShareQQ({
                            title : shareData.title,
                            desc : shareData.desc,
                            link : shareData.link,
                            imgUrl : shareData.img_url,
                            trigger : function(res) {
                                alert('用户点击分享到QQ');
                            },
                            complete : function(res) {
                                alert(JSON.stringify(res));
                            },
                            success : function(res) {
                                alert('已分享');
                            },
                            cancel : function(res) {
                                alert('已取消');
                            },
                            fail : function(res) {
                                alert(JSON.stringify(res));
                            }
                        });

                        //分享到微博
                        wx.onMenuShareWeibo({
                            title : shareData.title,
                            desc : shareData.desc,
                            link : shareData.link,
                            imgUrl : shareData.img_url,
                            trigger : function(res) {
                                alert('用户点击分享到微博');
                            },
                            complete : function(res) {
                                alert(JSON.stringify(res));
                            },
                            success : function(res) {
                                alert('已分享');
                            },
                            cancel : function(res) {
                                alert('已取消');
                            },
                            fail : function(res) {
                                alert(JSON.stringify(res));
                            }
                        });

                    }); //end of ready
                },  
                error: function(xhr, status, error) {  
                    alert(status);  
                    alert(xhr.responseText);  
                }
            });
        }
    </script>
</body>
</html>

水平比较差,还请大家指导一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值