asp.net开发微信公众平台之获取用户消息并处理

获取用户消息

用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取

微信服务器推送消息到服务器的HTTP请求报文示例

POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6&timestamp=1409659813&nonce=1372623149 HTTP/1.1

Host: qy.weixin.qq.com

从POST请求中获取数据

这样获得的用户消息可能有两种情况:加密后的消息或是未加密的消息,这与你在微信公共平台配置网站时 消息加解密模式的选取 有关,如果选择了明文模式,则不会加密,如果选择了兼容模式,则密文和明文都存在,如果选择的是安全模式,则用户消息会被加密,需要解密后才能进一步处理

2.回复用户消息

参考微信公共平台开发文档

•文本消息

<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{3}]]></Content>
</xml>

•图片消息

<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[{3}]]></MediaId>
</Image>
</xml>

消息格式已经有了,接着我们只需要设置相应的参数即可。

responseContent = string.Format(ReplyType.Message_Text,
 FromUserName.InnerText,
 ToUserName.InnerText,
DateTime.Now.Ticks,
String.IsNullOrEmpty(reply)?"Sorry,I can not follow you." :reply);

3.用户消息与服务器消息的加密解密

微信公共平台开发者文档中提供有c++,C#,java等各种语言的加密解密示例,我们用到的是C#,只需要将其中的两个文件添加到项目中即可,Sample.cs是微信团队给出的示例代码,不需要引用,对

WXBizMsgCrypt.cs与Cryptography.cs文件添加引用即可。为了进一步封装和方便调用,我又新建了一个类WeChatSecurityHelper

类中的定义两个方法,分别来进行加密(EncryptMsg)和解密(DecryptMsg),创建一个WXBizMsgCrypt对象,调用它的方法加解密,具体代码可见代码示例

WeChatSecurityHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common
{
  public class WeChatSecurityHelper
  {
    /// <summary>
    /// 定义Token,与微信公共平台上的Token保持一致
    /// </summary>
    private const string Token = "StupidMe";
    /// <summary>
    /// AppId 要与 微信公共平台 上的 AppId 保持一致
    /// </summary>
    private const string AppId = "11111111111";
    /// <summary>
    /// 加密用
    /// </summary>
    private const string AESKey = "pvX2KZWRLQSkUAbvArgLSAxCwTtxgFWF3XOnJ9iEUMG";

    private static Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(Token, AESKey, AppId);
    private string signature,timestamp,nonce;
    private static LogHelper logger = new LogHelper(typeof(WeChatSecurityHelper));

    public WeChatSecurityHelper(string signature, string timestamp, string nonce)
    {
      this.signature = signature;
      this.timestamp = timestamp;
      this.nonce = nonce;
    }

    /// <summary>
    /// 加密消息
    /// </summary>
    /// <param name="msg">要加密的消息</param>
    /// <returns>加密后的消息</returns>
    public string EncryptMsg(string msg)
    {
      string encryptMsg="";
      int result = wxcpt.EncryptMsg(msg, timestamp, nonce, ref encryptMsg);
      if (result == 0)
      {
        return encryptMsg;
      }
      else
      {
        logger.Error("消息加密失败");
        return "";
      }
    }

    /// <summary>
    /// 解密消息
    /// </summary>
    /// <param name="msg">消息体</param>
    /// <returns>明文消息</returns>
    public string DecryptMsg(string msg)
    {
      string decryptMsg = "";
      int result = wxcpt.DecryptMsg(signature, timestamp, nonce, msg,ref decryptMsg);
      if (result != 0)
      {
        logger.Error("消息解密失败,result:"+result);
      }
      return decryptMsg;
    }
  }
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • 微信小程序-详解微信登陆、微信支付、模板消息

    微信公众平台近日悄然开始内测微信小程序(微信公众号)功能,引来无数开发者和普通用户关注,微信支付的能力,是随着小程序的发布一并推出的,具有介绍如下: wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key).用户数据的加解密通讯需要依赖会话密钥完成. OBJECT参数说明: success返回参数说明: 示例代码: //app.js App({ onLaunch: functio

  • 基于python实现微信模板消息

    我的风格,废话不多说了,直接给大家贴代码了,并在一些难点上给大家附了注释,具体代码如下所示: #!/usr/bin/env python #-*- coding:utf-8 -*- import urllib2,json import datetime,time from config import * import sys reload(sys) sys.setdefaultencoding("utf-8") class WechatPush(): def __init__(self

  • php实现发送微信模板消息的方法

    本文实例讲述了php实现发送微信模板消息的方法.分享给大家供大家参考.具体如下: 该方法基于thinkphp实现实现,具体OrderPush.class.php文件如下: 复制代码 代码如下: <?php namespace Org\Weixin; /**  * Created by PhpStorm.  * User: StandOpen  * Date: 15-1-7  * Time: 9:41  */ class OrderPush {     protected $appid;    

  • php版微信开发之接收消息,自动判断及回复相应消息的方法

    本文实例讲述了php版微信开发之接收消息,自动判断及回复相应消息的方法.分享给大家供大家参考,具体如下: 微信的api现在己经强大到可以随意调用我们网站或指定数据库的内容进行自能回复现推送消息了,这里就来给大家介绍一个微信开发的笔记. 发送1,2,3,7测试相应的消息,菜单模式需要升级为服务号,或者订阅人数超过500以上. 1. 用户发送的消息都是通过你提交的开发者URL来接收,这里订阅号就可以搞定,发送过来的都是xml格式数据,需要解析,代码如下: $data = $GLOBALS["HTTP

  • 微信公众号开发之语音消息识别php代码

    本文实例为大家分享了php微信语音消息识别代码,供大家参考,具体内容如下 1.开通语音识别(默认关闭) 2.语音识别 请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recognition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效.开发者可以重新关注此帐号进行测试).开启语音识别后的语音XML数据包如下: <?php /** * wechat php test */ //define

  • C#微信开发之接收 / 返回文本消息

    接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息微信开发文档,对微信的这种消息处理机制有一定了解之后再着手开发(微信开发接收普通消息开发文档) 注意点: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此

  • 微信公众号开发之文本消息自动回复php代码

    本文实例为大家分享了php微信文本消息自动回复 别代码,供大家参考,具体内容如下 1.PHP示例代码下载  下载地址1:http://xiazai.jb51.net/201608/yuanma/phpwx(jb51.net).rar  下载地址2:https://mp.weixin.qq.com/wiki/home/index.html(开始开发->接入指南->PHP示例代码下载) 2.wx_sample.php初始代码 <?php /** * wechat php test */ //

  • php实现微信公众号主动推送消息

    通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下 此方法是通过模拟登录微信公共平台的方法来实现的. 代码如下: 一.登录接口部分代码 //登录 private function login(){ $url = 'https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN'; $this->send_data = array( 'username' => $this->_account,

  • 微信服务号推送模板消息接口

    微信服务号现在用的比较火,用户可以通过微信号订阅信息,有时候会用到模板消息.下面贴上代码,有注释写的很详细.在此@access_token 请调用 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=@appid&secret=@secret 接口获取. 具体代码: public static void Send() { dynamic postData = new ExpandoObject

  • Java开发微信公众号接收和被动回复普通消息

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本消息 2.图片消息 3.语音消息 4.视频消息 5.小视频消息 6.地理位置消息 7.链接消息(被动回复的消息) 被动回复的普通消息包括: 1.回复文本消息 2.回复图片消息 3.回复语音消息 4.回复视频消息 5.回复音乐消息 6.回复图文消息 其实接收消息和被动回复消息这两个动作是不分家的,这本

  • 微信小程序-消息提示框实例

    做Android的时候对toast是很熟悉的.微信小程序开发中toast也是重要的消息提示方式. 提示框: wx.showToast(OBJECT) 显示消息提示框 OBJECT参数说明: 示例代码: wx.showToast({ title: '成功', icon: 'success', duration: 2000 }) wx.hideToast() 隐藏消息提示框 wx.showToast({ title: '加载中', icon: 'loading', duration: 10000 }

随机推荐