zoukankan      html  css  js  c++  java
  • 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”

    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

    本文以介绍了分享接口里的“发送给朋友”事件的基本用法,其它的类推。

    JSSDK使用步骤

    1:绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

    备注:登录后可在“开发者中心”查看对应的接口权限。

    2:引入JS文件

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

    本例中还用到了jquery,所以还引用了jquery的js。

    3. 通过config接口注入权限验证配置

    JS方法:

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '<%= appID %>', // 必填,公众号的唯一标识
        timestamp: '<%= timestamp %>', // 必填,生成签名的时间戳
        nonceStr: '<%= nonceStr %>', // 必填,生成签名的随机串
        signature: '<%= signature %>',// 必填,签名,见附录1
        // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        jsApiList: [
        'onMenuShareAppMessage'
        ]
    });

    这里只写了一个API接口onMenuShareAppMessage, 更多接口请参考官方文档:微信JS-SDK说明文档

    debug设为true,会自动弹出一些提示信息;这里要注意的是,errmsg xxxx ok 是正常的,只有不是ok时才说明出错了。

    有些参数是从后台取到的,放在Page_Load里:

    string ticket = string.Empty;
    timestamp = JSSDKHelper.GetTimestamp();
    nonceStr = JSSDKHelper.GetNoncestr();
    JSSDKHelper jssdkhelper = new JSSDKHelper();
    public readonly string appID = ConfigurationManager.AppSettings["appID"];
    ticket = JsApiTicketContainer.TryGetTicket(appID, appSecret);
    signature = jssdkhelper.GetSignature(ticket, nonceStr, timestamp, Request.Url.AbsoluteUri.ToString());

    官方提供了几个语言的demo,但就是没有c#版本的,没办法,只能自己动手。这里的 JSSDKHelper 和 JsApiTicketContainer 都是用的Senparc.Weixin 框架。

    这些参数都是动态生成的,不能写死。否则这里就会出现一堆像什么 invalid signature 之类的错误。

    4. 通过ready接口处理成功验证

    JS 方法:

    wx.ready(function () {
        wx.onMenuShareAppMessage({
            title: '用c#开发微信 系列汇总',
            desc: '网上开发微信开发的教程很多,但c#相对较少。这里列出了我所有c#开发微信的文章,方便自己随时查阅。如果可能,我尽量附上源码,这样就可以直接发布运行看效果,更好地理解原理。',
            link: url,
            imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg',
            trigger: function (res) {
            },
            success: function (res) {
                friendcallback(res);
            },
            cancel: function (res) {
            },
            fail: function (res) {
                alert(JSON.stringify(res));
            }
        });
    });

    备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。

    当分享成功(success)后,可以调用回调函数 friendcallback(res):

    friendcallback = function (res) {
        var shareUrl = "Share.aspx?type=friend&url=" + encodeURIComponent(url) + "&u=" + "<%= ViewState["navOpenId"] as string %>" + "&s=" + "<%= ViewState["shareOpenId"] as string %>";
     
        //AJAX请求
        $.ajax({
            type: "get",
            url: shareUrl,
            beforeSend: function () {
            },
            success: function () {
            },
            complete: function () {
            },
            error: function () {
            }
        });
    };

    这里是用ajax把这次分享的记录通过share页面,保存到DB里去。当然你可以在这里做你想做的事。

  • 相关阅读:
    TCP/IP 三次握手四次挥手
    光端机2m是什么意思,光端机E1与2M有什么区别?
    电视光端机故障维护与指示灯说明
    电视光端机常见故障问题介绍
    传输设备,光端机的应用及故障分析
    RS485数据光端机产品特点及技术参数介绍
    网管交换机与非网管交换机的优缺点介绍
    网管型交换机相比普通交换机有哪些明显优势?
    什么叫POE交换机?POE交换机使用方法详解!
    交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?
  • 原文地址:https://www.cnblogs.com/Alex80/p/5732558.html
Copyright © 2011-2022 走看看