using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using Senparc.Weixin.Tencent;
namespace MsgCryptTest
{
class Sample
{
static void Main(string[] args)
{
//公众平台上开发者设置的token, appID, EncodingAESKey
string sToken = "QDG6eK";
string sAppID = "wx5823bf96d3bd56c7";
string sEncodingAESKey = "jWmYm7qr5nMoAUwZRjGtBxmz3KA1tkAj3ykkR6q2B2C";
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sAppID);
/* 1. 对用户回复的数据进行解密。
* 用户回复消息或者点击事件响应时,企业会收到回调消息,假设企业收到的推送消息:
* POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6×tamp=1409659813&nonce=1372623149 HTTP/1.1
Host: qy.weixin.qq.com
Content-Length: 613
*
*
*/
string sReqMsgSig = "477715d11cdb4164915debcba66cb864d751f3e6";
string sReqTimeStamp = "1409659813";
string sReqNonce = "1372623149";
string sReqData = "";
string sMsg = ""; //解析之后的明文
int ret = 0;
ret = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, sReqData, ref sMsg);
if (ret != 0)
{
System.Console.WriteLine("ERR: Decrypt fail, ret: " + ret);
return;
}
System.Console.WriteLine(sMsg);
/*
* 2. 企业回复用户消息也需要加密和拼接xml字符串。
* 假设企业需要回复用户的消息为:
*
*
*
* 1348831860
*
* 1234567890123456
*
* 生成xml格式的加密消息过程为:
*/
string sRespData = "13488318601234567890123456";
string sEncryptMsg = ""; //xml格式的密文
ret = wxcpt.EncryptMsg(sRespData, sReqTimeStamp, sReqNonce, ref sEncryptMsg);
System.Console.WriteLine("sEncryptMsg");
System.Console.WriteLine(sEncryptMsg);
/*测试:
* 将sEncryptMsg解密看看是否是原文
* */
XmlDocument doc = new Senparc.CO2NET.ExtensionEntities.XmlDocument_XxeFixed();
doc.LoadXml(sEncryptMsg);
XmlNode root = doc.FirstChild;
string sig = root["MsgSignature"].InnerText;
string enc = root["Encrypt"].InnerText;
string timestamp = root["TimeStamp"].InnerText;
string nonce = root["Nonce"].InnerText;
string stmp = "";
ret = wxcpt.DecryptMsg(sig, timestamp, nonce, sEncryptMsg, ref stmp);
System.Console.WriteLine("stemp");
System.Console.WriteLine(stmp + ret);
return;
}
}
}