微信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里去。当然你可以在这里做你想做的事。

用c#开发微信 系列汇总

用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”的更多相关文章

  1. 用c#开发微信(10) JSSDK 基本用法 分享接口“发送到朋友”

    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享. ...

  2. 微信企业号JS SDK

    微信企业号JS SDK <?php define('CorpID', "wx82e2c31215d9a5a7"); define('CorpSecret', "&q ...

  3. 微信前端js sdk以外的开发

    此时页面中就会出现刚才我画红圈部分的工具条. 这个工具条再加上上面的标题栏工具条. 极大的降低了可视区域的面积. 是否能将它去掉呢?答案是能够的.增加以下代码就能够去掉微信中以下的工具条: docum ...

  4. python开发微信公众号SDK选择

    1.wechat-sdk sudo pip install wechat-sdk 文档地址:  http://ww2.wechat-python-sdk.com/ 2.wechat sudo pip ...

  5. 使用web api开发微信公众号,调用图灵机器人接口(二)

    此文将分两篇讲解,主要分为以下几步 签名校验; 首次提交验证申请; 接收消息; 被动响应消息(返回XML); 映射图灵消息及微信消息; 此篇为第二篇. 被动响应消息(返回XML) 上一篇中,我们已经可 ...

  6. 使用web api开发微信公众号,调用图灵机器人接口(一)

    此文将分两篇讲解,主要分为以下几步 签名校验; 首次提交验证申请; 接收消息; 被动响应消息(返回XML); 映射图灵消息及微信消息; 其实图灵机器人搭载微信公众号很简单,只需要把图灵的地址配到公众后 ...

  7. 用c#开发微信 (12) 微统计 - 阅读分享统计系统 2 业务逻辑实现

    微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...

  8. 用c#开发微信 系列汇总

    网上开发微信开发的教程很多,但c#相对较少.这里列出了我所有c#开发微信的文章,方便自己随时查阅.   一.基础知识 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下 ...

  9. 调用微信js sdk

    场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...

随机推荐

  1. 【转】JVM 堆内存设置原理

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  2. Python自动化 【第二篇】:Python基础-列表、元组、字典

    本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库, ...

  3. android自定义圆形图片和遇到的问题

    画圆遇到的问题:图片单位不一样,导致图片只能显示出圆的一部分:看代码: public class MyCircleIamge extends ImageView { private Context c ...

  4. node中的可读流和可写流

    javascript的一个不足之处是不能处理二进制数据,于是node中引入了Buffer类型.这个类型以一个字节(即8位)为单位,给数据分配存储空间.它的使用类似于Array,但是与Array又有不同 ...

  5. scala 学习: case class

    case class: 1.定义为case class 的类在实例化时,可以不使用new 关键字. case class People(name:String, age:Int) val zhangs ...

  6. yii学习第一课 《命名空间》

    <?php namespace a\b\c; class Apple { function getInfo() { echo 'this is a<br>'; } } <?ph ...

  7. ContentProvider 增删改查通讯录

    一.通讯录应用介绍 通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的. 通讯录是ContentProvider的应用,通讯 ...

  8. mac操作快捷键

  9. Harris角点检测

    代码示例一: #include<opencv2/opencv.hpp> using namespace cv; int main(){ Mat src = imread(); imshow ...

  10. 安装数据库出现错误vc_red.msi找不到

    用虚拟光驱安装数据的时候可能会出现,找不到vc_red.msi的问题,通过加载的虚拟光驱目录设置,可能 仍然后问题,比如程序停止运行. 解决方法是:解压iso文件,用解压后的文件安装.然后在解压文件夹 ...