地铁扫二维码生成器的工作人员有没有权利关YJ201609

本文只是记录一下自己最近开发的一个小功能,方便以后查看。
一、需求原文如下:
1.vip微信参数配置
&& 1)是否启用
&& 2)设置每单最大红包金额 && (例如5 )
&& 3)设置各类别 红包金额范围 &
&&&&&&&&&&&&&&&&&&&& 钻石&&& 3-5
&&&&&&&&&&&&&&&&&&&& 黄金&&& 2-3& 等等
2.质量保证单&
&& 打印二维码 参数传销售门店 以及销售单号
&& 客户扫码&
&&&&&&&&& 1)自动关注服务号
&&&&&&&&& 2)自动匹配客户档案
&&&&&&&&&&&& openid 匹配到档案的增加积分以及总积分 ,
&&&&&&&&&&&& 未匹配到档案的& 客户填写& 姓名,手机号 如果手机号匹配到记录& 自动将客户档案关联上
&&&&&&&&&&&& 手机号也未匹配到记录& 自动建立档案(自动插入所属分销商id,微信openid,姓名,手机号,总积分,剩余积分& 必填项添默认值)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&& 3)根据用户结果 自动关联客户消费记录
&&&&&&&&& 4)根据积分规则判断消费完客户是否达成升级标准(客户等级只升不降)
&&&&&&&&& 5)根据参数配置&& 自动发送一个红包给客户&& 同单多次扫描只发送一次红包.
&&&&&&&&&&&&&&&&&& 红包规则& 1.判断是否启用&&&& 没有启用不发送
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2.发送红包时 取明细条码里面 红包金额上限最大的 记录& 随机生成一个金额的红包发送
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 例如& 客户购买2件货品&& 钻石&& 3-5&& 黄金2-3
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 那么随机发送一个 3-5元的红包给客户
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (暂不考虑销退的情况)
&二、需求理解:简单来说就是门店下单时需要在质保单上面打印上我们的服务号二维码(二维码参数带上订单号),扫码时根据openid(客户微信号在我们的服务号唯一的标示)匹配客户表,如果之前已经存在,就根据单号和积分规则计算客户的积分,没发过红包的单就发送一个根据类别配置金额的红包给客户。如果openid没有匹配到就给个链接填写vip信息,之后发送红包和消费记录,同时计算积分。
1.服务号申请 2.开通支付功能,下载证书。& 3.调用带参数的二维码接口生成二维码。4.响应关注事件(判断用户身份,计算积分,发送红包等)
using CommonH
using mon.M
using mon.WeiX
using JDF.ERP.CRM.BLL;
using JDF.ERP.Invoicing.BLL;
using JDF.ERP.PlatConfig.BLL;
using JDF.ERP.Style.BLL;
using LitJ
using System.C
using System.Collections.G
using System.L
using System.N
using System.Net.H
using System.T
using System.W
using System.Web.H
using System.X
using mon.T
using JDF.ERP.SystemManage.BLL;
using System.IO;
using System.Security.C
using Newtonsoft.J
using JDF.ERP.Sale.BLL;
namespace JDF.ERP.WebAPI.Control
/// &summary&
/// 金大福微信服务号交互响应类
/// &/summary&
public class JDFWXServiceController : ApiController
WeiXinHelp objWeiXinHelp = new WeiXinHelp();
WeiXinQiYeHelp objWeiXinQiYeHelp = new WeiXinQiYeHelp();
Log objLog = new Log();
/// &summary&
/// 用于处理金大福服务号的交互
/// &/summary&
/// &returns&&/returns&
[HttpPost]
public HttpResponseMessage Service()
var response = Request.CreateResponse(HttpStatusCode.OK);
var act = Misc.GetRequstValue("act");
var ordersNo = Misc.GetRequstValue("no");
//微信加密签名,signature结合了开发者填写的token参数和请求timestamp参数、nonce参数
var signature = Misc.GetRequstValue("signature");
var timestamp = Misc.GetRequstValue("timestamp");//时间戳
var nonce = Misc.GetRequstValue("nonce");//随机数
var echostr = Misc.GetRequstValue("echostr");
//随机字符串
objLog.Action("微信接入验证:" + signature + "|" + timestamp + "|" + echostr);
#region 是否是验证操作(这个只会在申请成为开发者时验证一次)
if (!string.IsNullOrWhiteSpace(echostr))
response.Content = new StringContent(ValidateWX(signature, timestamp, nonce, echostr), Encoding.UTF8);
#endregion
#region 创建菜单
if (act != null)
if (act == "create")
//CreateMenu1("wx30c0a5c885bba30d", "dd3f65ae813d4b14ce0e776");
//生成带参数的二维码
string responseJson = objWeiXinHelp.GetQrcodeYJ("wx30c0a5c885bba30d", "dd3f65ae813d4b14ce0e776", ordersNo); //S
var DynamicObject = JsonConvert.DeserializeObject&dynamic&(responseJson);
string ticket = DynamicObject.
string path = Misc.GetPath("/images");
objWeiXinHelp.GetCodePic(ticket, path);
//发送模板消息
//string url = ConfigHelper.GetConfigString("OutERPURL");
//objWeiXinHelp.SendUserInfoAdd("okehNt44afCOnburT5b7dXHivlSc", url + "WeiXinCoustomerAdd/Index?OrderNo=" + "S58" + "&OpenID=okehNt44afCOnburT5b7dXHivlSc", "请您完善您的金大福VIP信息", "完善资料有红包哟", DateTime.Now.ToShortDateString(), "感谢您对金大福的关注!");
//objWeiXinHelp.FocusLike();
#endregion
string postData = objWeiXinHelp.getPostInput(); //微信传过来的数据 xml格式的
XmlDocument xmlDoc = new XmlDocument();
if (postData != "")
var bOrder_S =
BOrder_S.GetInstance();//销售表
BCusAccount bCusAccount = BCusAccount.GetInstance();//账户表
xmlDoc.LoadXml(postData);
XmlNode msgTypeNode = xmlDoc.ChildNodes[0].SelectSingleNode("MsgType");
string msgType = (msgTypeNode == null ? "" : msgTypeNode.InnerText);
XmlNode eventKeyNode = xmlDoc.ChildNodes[0].SelectSingleNode("Event");
string eventKey = (eventKeyNode == null ? "" : eventKeyNode.InnerText);
XmlNode orderNode = xmlDoc.ChildNodes[0].SelectSingleNode("EventKey");
string orderNO = (orderNode == null ? "" : orderNode.InnerText);
if (msgType == "text")
//获取用户消息
objLog.Action("微信接受类型是文本:" + postData);
//GetUserSendMsg(postData);
//客户扫码事件
else if (eventKey.ToLower() == "scan" || eventKey.ToLower() == "subscribe")
//发送方帐号的openid
XmlNode fromUserName = xmlDoc.ChildNodes[0].SelectSingleNode("FromUserName");
string openId = (fromUserName == null ? "" : fromUserName.InnerText);
if (String.IsNullOrEmpty(orderNO))
//获取销售订单
var order_s = bOrder_S.GetAllByCondition(new SEOrder_S()
OrderNo = orderNO
}).FirstOrDefault();
if (order_s == null)
#region 验证条码是否已经被其他人扫过
if (order_s != null && !string.IsNullOrEmpty(order_s.SVIPNo))
var cust = BCustomer.GetInstance().GetAllByCondition(new SECustomer()
VIPNo = order_s.SVIPNo
}).FirstOrDefault();
if (cust != null)
if (!string.IsNullOrEmpty(cust.Cus_OpenID) && cust.Cus_OpenID != openId) //证明这个二维码已经被扫描过了,不能再次扫描
objWeiXinHelp.SendTextMess(openId, "本条码已扫描过了,感谢您的关注");
#endregion
var coutoms = BCustomer.GetInstance().GetAllByCondition(new SECustomer()
Cus_OpenID = openId
}).FirstOrDefault();
//本单还没有计算过积分
if (string.IsNullOrEmpty(order_s.SVIPNo))
if (coutoms != null) //消费用户已经存在
bOrder_S.ProcessVip(orderNO, coutoms, order_s);
//发送消费记录
var agentName = BAgent.GetInstance().GetOneByKeyID(order_s.SAgentID.Value).AgentN
var levelName = BCusLevel.GetInstance().GetOneByKeyID(coutoms.CusALevel.Value).CusLevelN
objWeiXinHelp.SendShoppingList(openId, "", "尊敬的" + coutoms.CusName + ",您的消费信息如下:", coutoms.VIPNo, agentName, order_s.TotalRealSalePrice + "元", "总积" + coutoms.CusATotalPoint + "分,会员等级为" + levelName);
bOrder_S.SendRedPack(orderNO, coutoms.CustomerID, openId);
else //根据openid不存在
string url = ConfigHelper.GetConfigString("OutERPURL");
//发送一个注册身份的连接
objWeiXinHelp.SendUserInfoAdd(openId, url + "WeiXinCoustomerAdd/Index?OrderNo=" + orderNO + "&OpenID="+openId, "请您完善您的金大福VIP信息", "完善资料有红包哟", DateTime.Now.ToShortDateString(), "感谢您对金大福的关注!");
if (coutoms==null)
coutoms = BCustomer.GetInstance().GetAllByCondition(new SECustomer()
VIPNo = order_s.SVIPNo
}).FirstOrDefault();
coutoms.Cus_OpenID = openId;
BCustomer.GetInstance().UpdateOne(coutoms);
//更新openid
//发送消费记录
var agentName = BAgent.GetInstance().GetOneByKeyID(order_s.SAgentID.Value).AgentN
var levelName = BCusLevel.GetInstance().GetOneByKeyID(coutoms.CusALevel.Value).CusLevelN
objWeiXinHelp.SendShoppingList(openId, "", "尊敬的" + coutoms.CusName + ",您的消费信息如下:", coutoms.VIPNo, agentName, order_s.TotalRealSalePrice + "元", "总积" + coutoms.CusATotalPoint + "分,会员等级为" + levelName);
bOrder_S.SendRedPack(orderNO, coutoms.CustomerID, openId);
objLog.Action("微信接受类型开始,指令:" + postData);
//获取指令
GetMenuClickType(postData);
/// &summary&
/// 获取用户关注事件
/// &/summary&
public void GetSubscribe(string postData)
StringBuilder log = new StringBuilder();
StringBuilder str = new StringBuilder();
log.Append("====start=====");
//string postData = getPostInput();
XmlDocument xmlDoc = new XmlDocument();
log.Append("postData:" + postData);
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志3 有人关注了", postData.ToString());
if (postData != "")
log.Append(postData);
xmlDoc.LoadXml(postData);
XmlNode toUserNameNode = xmlDoc.ChildNodes[0].SelectSingleNode("ToUserName");
XmlNode fromUserNameNode = xmlDoc.ChildNodes[0].SelectSingleNode("FromUserName");
XmlNode eventKeyNode = xmlDoc.ChildNodes[0].SelectSingleNode("Event");
string toUserName = toUserNameNode.InnerT
string fromUserName = fromUserNameNode.InnerT
string eventKey = eventKeyNode.InnerT
string url = "";
string fromWxID = fromUserN
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志4", eventKey);
if (eventKey == "subscribe")
string responseJson = objWeiXinHelp.GetQrcodeYJ("wx30c0a5c885bba30d", "dd3f65ae813d4b14ce0e776", "S58");
xmlDoc.LoadXml(postData);
var DynamicObject = JsonConvert.DeserializeObject&dynamic&(responseJson);
string ticket = DynamicObject.
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[text]]&&/MsgType&");
str.Append("&Content&&![CDATA[感谢关注金大福官方公众号。\r\n 1、点击屏幕右上角菜单&查看历史消息,查看金大福最近资讯 \r\n 2、屏幕下方菜单体验客户关怀 \r\n 更多金大福最新资讯,请随时订阅查看]]&&/Content&");
str.Append("&/xml&");
catch (Exception ex)
log.Append(ex.ToString());
//Common.PageValidate.WriteFile(log.ToString());
//response.Write(str.ToString());
/// &summary&
/// 创建单个菜单
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="appSecret"&&/param&
/// &returns&&/returns&
public bool CreateMenu1(string appId, string appSecret)
var result = false;
string access_token = objWeiXinHelp.GetAccess_token(appId, appSecret);
string url = "https://api./cgi-bin/menu/create?access_token=" + access_token + "";
StringBuilder menuData = new StringBuilder();
menuData.Append("{");
menuData.Append("
\"button\":[");
menuData.Append("
menuData.Append("
\"type\":\"view\",");
menuData.Append("
\"name\":\"珠宝商城\",");
menuData.Append("
\"url\":\"/642770.html?fxshopid=048481\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"name\":\"个人中心\",");
menuData.Append("
\"sub_button\":[");
menuData.Append("
menuData.Append("
\"type\":\"view\",");
menuData.Append("
\"name\":\"会员注册\",");
menuData.Append("
\"url\":\"/m/Login.shtml?comid=642770&lu=http%3a%2f%%2fdefault.aspx%3fcomid%3d642770\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"店铺绑定\",");
menuData.Append("
\"key\":\"dpbd\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"金大福18周年庆\",");
menuData.Append("
\"key\":\"ktf\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"售后服务\",");
menuData.Append("
\"key\":\"tswq\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"投诉维权\",");
menuData.Append("
\"key\":\"tswq2\"");
menuData.Append("
menuData.Append("
menuData.Append("
menuData.Append("
\"name\":\"品牌速递\",");
menuData.Append("
\"sub_button\":[");
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"品牌介绍\",");
menuData.Append("
\"key\":\"ppjs\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"联系我们\",");
menuData.Append("
\"key\":\"lxwm\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"新品抢鲜\",");
menuData.Append("
\"key\":\"xpqx\"");
menuData.Append("
menuData.Append("
menuData.Append("
\"type\":\"click\",");
menuData.Append("
\"name\":\"火热活动\",");
menuData.Append("
\"key\":\"hrhd\"");
menuData.Append("
//menuData.Append("
//menuData.Append("
\"type\":\"click\",");
//menuData.Append("
\"name\":\"现场摇一摇\",");
//menuData.Append("
\"key\":\"xcyj\"");
//menuData.Append("
menuData.Append("
menuData.Append(" }");
string res = objWeiXinHelp.postResponse(url, menuData.ToString());
JsonData jd = JsonMapper.ToObject(res);
if (jd["errcode"] != null)
if (jd["errcode"].ToString() == "0")
result = true;
objLog.Action(jd["errcode"].ToString());
//response.Write(access_token);
/// &summary&
/// 获取菜单点击事件
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="appSecret"&&/param&
/// &returns&&/returns&
public void GetMenuClickType(string postData)
StringBuilder log = new StringBuilder();
StringBuilder str = new StringBuilder();
log.Append("====start=====");
XmlDocument xmlDoc = new XmlDocument();
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志5", postData);
if (postData != "")
log.Append(postData);
xmlDoc.LoadXml(postData);
XmlNode toUserNameNode = xmlDoc.ChildNodes[0].SelectSingleNode("ToUserName");
XmlNode fromUserNameNode = xmlDoc.ChildNodes[0].SelectSingleNode("FromUserName");
XmlNode eventKeyNode = xmlDoc.ChildNodes[0].SelectSingleNode("EventKey");
string toUserName = toUserNameNode.InnerT
string fromUserName = fromUserNameNode.InnerT
string eventKey = eventKeyNode.InnerT
log.Append(eventKey);
string url = "";
string fromWxID = fromUserN
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志6", eventKey);
switch (eventKey.Trim())
case "zbsc"://珠宝商城
string indexUrl =
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【珠宝商城】珠宝雕刻时光 微店拉近你我]]&&/Title&");
str.Append("&Description&&![CDATA[功能开发中,敬请期待...]]&&/Description&");
str.Append("&PicUrl&&![CDATA[/jdf/zbsc.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "tswq"://售后服务
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[text]]&&/MsgType&");
str.Append("&Content&&![CDATA[尊敬的用户:如果您对我们网站的商品及服务有任何的投诉与建议,请您联系我们的客服人员,我们将竭诚为您服务,为此给您带来的不便请您原谅。客服热线: ;客服邮箱:.cn]]&&/Content&");
str.Append("&/xml&");
case "wddd"://我的订单
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【我的订单】敬备香茗 恭候亲临]]&&/Title&");
str.Append("&Description&&![CDATA[功能开发中,敬请期待...]]&&/Description&");
str.Append("&PicUrl&&![CDATA[/jdf/wddd.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "fjmd"://附近门店
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【附近门店】传承发展 人文为本]]&&/Title&");
str.Append("&Description&&![CDATA[功能开发中,敬请期待...]]&&/Description&");
str.Append("&PicUrl&&![CDATA[/jdf/fjmd.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "tswq2"://投诉维权
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【投诉维权】传承发展 人文为本]]&&/Title&");
str.Append("&Description&&![CDATA[功能开发中,敬请期待...]]&&/Description&");
str.Append("&PicUrl&&![CDATA[/jdf/tswq.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "ppjs"://品牌介绍
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【品牌介绍】卓金品质 福享天成]]&&/Title&");
str.Append("&Description&&![CDATA[金大福珠宝有限公司成立于日,是专业从事黄金、K金、铂金、钻石、翡翠及其它珠宝饰品的生产、加工、批发、零售及进出口业务的大型珠宝专业公司。...]]&&/Description&");
str.Append("&PicUrl&&![CDATA[http://120.24.182.226:81/images/ppjs.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[http://120.24.182.226:81/brand_introduce.html]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "lxwm"://联系我们
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[text]]&&/MsgType&");
str.Append("&Content&&![CDATA[电话/TEL:2
传真/FAX:6 电邮/E-MAIL:.cn 邮编/P.C:518001 售后服务电话:400-882-6068 联系地址:深圳市罗湖区国贸商业大厦28-30楼]]&&/Content&");
str.Append("&/xml&");
case "xpqx"://新品抢鲜
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【新品抢鲜】璀璨星空 闪耀梦想]]&&/Title&");
str.Append("&Description&&![CDATA[金大福珠宝有限公司成立于日,是专业从事黄金、K金、铂金、钻石、翡翠及其它珠宝饰品的生产、加工、批发、零售及进出口业务的大型珠宝专业公司。...]]&&/Description&");
str.Append("&PicUrl&&![CDATA[http://120.24.182.226:81/images/xpqx.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[http://120.24.182.226:81/brand_new.html]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "hrhd"://火热活动
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[news]]&&/MsgType&");
str.Append("&ArticleCount&1&/ArticleCount&");
str.Append("&Articles&");
str.Append("&item&");
str.Append("&Title&&![CDATA[【火热活动】寻找星空使者]]&&/Title&");
str.Append("&Description&&![CDATA[一个来自&星空&的呼唤!圣诞夜,让我们相约金大福!]]&&/Description&");
str.Append("&PicUrl&&![CDATA[http://120.24.182.226:81/images/hotActive1.jpg]]&&/PicUrl&");
str.Append("&Url&&![CDATA[http://120.24.182.226:81/hotActicve.html]]&&/Url&");
str.Append("&/item&");
str.Append("&/Articles&");
str.Append("&/xml&");
case "dpbd"://店铺绑定
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[text]]&&/MsgType&");
str.Append("&Content&&![CDATA[请输入您要绑定的微信号:格式为:【dpbd微信号】;此功能目前提供给门店管理员使用!]]&&/Content&");
str.Append("&/xml&");
case "ktf"://16周庆典
str.Append("&xml&");
str.Append("&ToUserName&&![CDATA[" + fromUserName + "]]&&/ToUserName&");
str.Append("&FromUserName&&![CDATA[" + toUserName + "]]&&/FromUserName&");
str.Append("&CreateTime&" + CDtoInt(DateTime.Now) + "&/CreateTime&");
str.Append("&MsgType&&![CDATA[text]]&&/MsgType&");
str.Append("&Content&&![CDATA[请输入您要绑定的微信号或者手机号:格式为:【ktf微信号或者ktf手机号】;此功能目前提供给特约嘉宾使用!]]&&/Content&");
str.Append("&/xml&");
log.Append(str);
catch (Exception ex)
log.Append(ex.ToString());
objLog.Action(log.ToString());
//response.Write(str.ToString());
/// &summary&
/// DateTime时间格式转换为Unix时间戳格式
/// &/summary&
/// &param name="time"&&/param&
/// &returns&&/returns&
public int CDtoInt(System.DateTime time)
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalS
/// &summary&
/// 微信接入验证
/// &/summary&
public string ValidateWX(string signature, string timestamp, string nonce, string echostr)
string token = "tokentest";
if (!String.IsNullOrWhiteSpace(signature) && !String.IsNullOrWhiteSpace(timestamp) && !String.IsNullOrWhiteSpace(nonce) && !String.IsNullOrWhiteSpace(echostr))
objLog.Action(signature + "|" + timestamp + "|" + nonce + "|" + echostr);
string[] ArrTmp = { token, timestamp, nonce };
Array.Sort(ArrTmp);   //字典排序
string tmpStr = string.Join("", ArrTmp);
tmpStr = SHA1_Encrypt(tmpStr); //
tmpStr = tmpStr.ToLower();
objLog.Action(tmpStr + "|" + signature);
if (tmpStr == signature)
/// &summary&
/// 对字符串进行SHA1加密
/// &/summary&
/// &param name="strIN"&需要加密的字符串&/param&
/// &returns&密文&/returns&
public string SHA1_Encrypt(string Source_String)
byte[] StrRes = Encoding.Default.GetBytes(Source_String);
HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
StrRes = puteHash(StrRes);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in StrRes)
EnText.AppendFormat("{0:x2}", iByte);
return EnText.ToString();
服务号响应
2 using LitJ
4 using System.Collections.G
5 using System.C
6 using System.IO;
7 using System.L
8 using System.N
9 using System.Security.C
10 using System.Security.Cryptography.X509C
11 using System.T
12 using System.Threading.T
13 using System.W
15 namespace mon.WeiXin
public class WeiXinHelp
/// &summary&
/// 获取Access_token
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="appSecret"&&/param&
/// &returns&&/returns&
public string GetAccess_token(string appId, string appSecret)
string str = "";
string url = string.Format("https://api./cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", HttpContext.Current.Server.UrlPathEncode(appId.Trim()).Replace("%e2%80%8b", ""), HttpContext.Current.Server.UrlPathEncode(appSecret.Trim()).Replace("%e2%80%8b", ""));
string res = getResponse(url);
JsonData jd = JsonMapper.ToObject(res);
if (jd["access_token"] != null)
str = jd["access_token"].ToString();
/// &summary&
/// 微信发送补全用户资料提醒
/// &/summary&
/// &param name="ToOpenID"&openid&/param&
/// &param name="LinkURL"&连接&/param&
/// &param name="TopMess"&标题&/param&
/// &param name="Code"&补充内容&/param&
/// &param name="SendTime"&时间&/param&
/// &param name="Memark"&备注&/param&
/// &returns&&/returns&
public string SendUserInfoAdd(string ToOpenID, string LinkURL, string TopMess, string Code, string SendTime, string Memark)
WeiXinQiYeHelp objWeiXinQiYeHelp = new WeiXinQiYeHelp();
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志17", "openId:" + LinkURL + "|" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
string TemplateID = "tPzeIFp_tv7SD936k39s66-5iGeLbZ1084faTDk6gW4";
string[] appID_appsecret = ConfigHelper.GetConfigString("appID_appsecret").Split('&');
string Token = GetAccess_token(appID_appsecret[0], appID_appsecret[1]);
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志18", "openId:" + Token + "|" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
string postData = "{ \"touser\":\"" + ToOpenID + "\","
+ "\"template_id\":\"" + TemplateID + "\",";
if (!string.IsNullOrEmpty(LinkURL))
postData += "\"url\":\"" + LinkURL + "\",";
postData += "\"topcolor\":\"#FF0000\","
+ "\"data\":{" +
"\"first\":{\"value\":\"" + TopMess + "\"}," +
"\"keyword1\":{\"value\":\"" + Code + "\"}," +
"\"keyword2\":{\"value\":\"" + SendTime + "\"}," +
"\"remark\":{\"value\":\"" + Memark + "\"}"
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志19", "openId:" + postData + "|" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
string ReturnMess = postResponse("https://api./cgi-bin/message/template/send?access_token=" + Token, postData);
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志20", "openId:" + ReturnMess + "|" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
return ReturnM
/// &summary&
/// 发送vip消费信息
/// &/summary&
/// &param name="ToOpenID"&&/param&
/// &param name="LinkURL"&&/param&
/// &param name="first"&&/param&
/// &param name="keyword1"&&/param&
/// &param name="keyword2"&&/param&
/// &param name="keyword3"&&/param&
/// &param name="Memark"&&/param&
/// &returns&&/returns&
public string SendShoppingList(string ToOpenID, string LinkURL, string first, string keyword1, string keyword2, string keyword3, string Memark)
WeiXinQiYeHelp objWeiXinQiYeHelp = new WeiXinQiYeHelp();
string TemplateID = "b3tZ5g5QWOVIapv8qa7sdm4QQSDh1h3_NOi6LDgUGkU";
string[] appID_appsecret = ConfigHelper.GetConfigString("appID_appsecret").Split('&');
string Token = GetAccess_token(appID_appsecret[0], appID_appsecret[1]);
string postData = "{ \"touser\":\"" + ToOpenID + "\","
+ "\"template_id\":\"" + TemplateID + "\",";
if (!string.IsNullOrEmpty(LinkURL))
postData += "\"url\":\"" + LinkURL + "\",";
postData += "\"topcolor\":\"#FF0000\","
+ "\"data\":{" +
"\"first\":{\"value\":\"" + first + "\"}," +
"\"keyword1\":{\"value\":\"" + keyword1 + "\"}," +
"\"keyword2\":{\"value\":\"" + keyword2 + "\"}," +
"\"keyword3\":{\"value\":\"" + keyword3 + "\"}," +
"\"remark\":{\"value\":\"" + Memark + "\"}"
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志19", "openId:" + postData + "|" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
string ReturnMess = postResponse("https://api./cgi-bin/message/template/send?access_token=" + Token, postData);
//objWeiXinQiYeHelp.SendNewMess("4289", "", "错误日志20", "openId:" + ReturnMess + "|" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
return ReturnM
/// &summary&
/// 发送微信文本消息
/// &/summary&
/// &param name="ToOpenID"&接收用户ID&/param&
/// &param name="Mess"&发送内容&/param&
/// &returns&&/returns&
public string SendTextMess(string ToOpenID, string Mess)
//appID&appsecret
string[] appID_appsecret = ConfigHelper.GetConfigString("appID_appsecret").Split('&');
string Token = GetAccess_token(appID_appsecret[0], appID_appsecret[1]);
string postData = "{\"touser\":\"" + ToOpenID + "\",\"msgtype\":\"text\",\"text\":{\"content\":\"" + Mess + "\"}}";
string ReturnMess = postResponse("https://api./cgi-bin/message/custom/send?access_token=" + Token, postData);
return ReturnM
/// &summary&
/// 发送验证码消息
/// &/summary&
/// &param name="ToOpenID"&&/param&
/// &param name="LinkURL"&&/param&
/// &param name="TopMess"&&/param&
/// &param name="Code"&&/param&
/// &param name="SendTime"&&/param&
/// &param name="Memark"&&/param&
/// &returns&&/returns&
public string SendTemplateMess1(string ToOpenID, string LinkURL, string TopMess, string Code, string SendTime, string Memark)
string TemplateID = "hDEyGOgszHwAKnVAjS_O9Kndv3YBsOaTINM3Y-kmJVM";
string[] appID_appsecret = ConfigHelper.GetConfigString("appID_appsecret").Split('&');
string Token = GetAccess_token(appID_appsecret[0], appID_appsecret[1]);
string postData = "{ \"touser\":\"" + ToOpenID + "\","
+ "\"template_id\":\"" + TemplateID + "\",";
if (!string.IsNullOrEmpty(LinkURL))
postData += "\"url\":\"" + LinkURL + "\",";
postData += "\"topcolor\":\"#FF0000\","
+ "\"data\":{" +
"\"first\":{\"value\":\"" + TopMess + "\"}," +
"\"keyword1\":{\"value\":\"" + Code + "\"}," +
"\"keyword2\":{\"value\":\"" + SendTime + "\"}," +
"\"remark\":{\"value\":\"" + Memark + "\"}"
string ReturnMess = postResponse("https://api./cgi-bin/message/template/send?access_token=" + Token, postData);
return ReturnM
/// &summary&
/// 接收post数据
/// &/summary&
/// &returns&&/returns&
public T getPostInput&T&(T obj)
StringBuilder log = new StringBuilder();
string res = "";
System.IO.Stream s = HttpContext.Current.Request.InputS
int count = 0;
byte[] buffer = new byte[10240];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, 10240)) & 0)
builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
s.Flush();
s.Close();
s.Dispose();
log.Append("微信返回的消息:" + builder);
res = builder.ToString();
obj = JSONHelper.JsonStrToT&T&(res);
catch (Exception ex)
log.Append("ex:" + ex.ToString());
//Common.PageValidate.WriteFile(log.ToString());
/// &summary&
/// 发送日结消息
/// &/summary&
/// &param name="ToOpenID"&&/param&
/// &param name="LinkURL"&&/param&
/// &param name="TopMess"&&/param&
/// &param name="Code"&&/param&
/// &param name="SendTime"&&/param&
/// &param name="Memark"&&/param&
/// &returns&&/returns&
public string SendTemplateMess2(string ToOpenID, string LinkURL, string first, string keyword1, string keyword2, string remark)
string TemplateID = "XPV1mNWCN9Jx-wHWDf8Vjw9gbxZ0wcpMRl25TlSAD8U";
string[] appID_appsecret = ConfigHelper.GetConfigString("appID_appsecret").Split('&');
string Token = GetAccess_token(appID_appsecret[0], appID_appsecret[1]);
string postData = "{ \"touser\":\"" + ToOpenID + "\","
+ "\"template_id\":\"" + TemplateID + "\",";
if (!string.IsNullOrEmpty(LinkURL))
postData += "\"url\":\"" + LinkURL + "\",";
postData += "\"topcolor\":\"#FF0000\","
+ "\"data\":{" +
"\"first\":{\"value\":\"" + first + "\"}," +
"\"keyword1\":{\"value\":\"" + keyword1 + "\"}," +
"\"keyword2\":{\"value\":\"" + keyword2 + "\"}," +
"\"remark\":{\"value\":\"" + remark + "\"}"
string ReturnMess = postResponse("https://api./cgi-bin/message/template/send?access_token=" + Token, postData);
return ReturnM
/// &summary&
/// 接收post数据
/// &/summary&
/// &returns&&/returns&
public string getPostInput()
StringBuilder log = new StringBuilder();
string res = "";
System.IO.Stream s = HttpContext.Current.Request.InputS
int count = 0;
byte[] buffer = new byte[10240];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, 10240)) & 0)
builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
s.Flush();
s.Close();
s.Dispose();
log.Append("微信返回的消息:" + builder);
res = builder.ToString();
catch (Exception ex)
log.Append("ex:" + ex.ToString());
return "";
//Common.PageValidate.WriteFile(log.ToString());
/// &summary&
/// post请求
/// &/summary&
/// &param name="url"&&/param&
/// &returns&&/returns&
public string postResponse(string url, string postData)
byte[] b = System.Text.Encoding.UTF8.GetBytes(postData);
StringBuilder content = new StringBuilder();
HttpWebRequest request = WebRequest.Create(url) as HttpWebR
request.Method = "Post";
request.ContentLength = b.L
using (Stream stream = request.GetRequestStream())
stream.Write(b, 0, b.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sReader = new StreamReader(responseStream);
Char[] sReaderBuffer = new Char[2560];
int count = sReader.Read(sReaderBuffer, 0, 2560);
while (count & 0)
String tempStr = new String(sReaderBuffer, 0, count);
content.Append(tempStr);
count = sReader.Read(sReaderBuffer, 0, 2560);
sReader.Close();
return content.ToString();
return "";
/// &summary&
/// get请求
/// &/summary&
/// &param name="url"&&/param&
/// &returns&&/returns&
public string getResponse(string url)
StringBuilder content = new StringBuilder();
HttpWebRequest request = WebRequest.Create(url) as HttpWebR
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
Char[] sReaderBuffer = new Char[2560];
int count = sReader.Read(sReaderBuffer, 0, 2560);
while (count & 0)
String tempStr = new String(sReaderBuffer, 0, count);
content.Append(tempStr);
count = sReader.Read(sReaderBuffer, 0, 2560);
sReader.Close();
return content.ToString();
return "";
/// &summary&
/// post请求
/// &/summary&
/// &param name="url"&&/param&
/// &returns&&/returns&
public string postResponse&T&(string url, T obj)
string postData = JSONHelper.ToJSON(obj);
byte[] b = System.Text.Encoding.UTF8.GetBytes(postData);
StringBuilder content = new StringBuilder();
HttpWebRequest request = WebRequest.Create(url) as HttpWebR
request.Method = "Post";
request.ContentLength = b.L
using (Stream stream = request.GetRequestStream())
stream.Write(b, 0, b.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sReader = new StreamReader(responseStream);
Char[] sReaderBuffer = new Char[2560];
int count = sReader.Read(sReaderBuffer, 0, 2560);
while (count & 0)
String tempStr = new String(sReaderBuffer, 0, count);
content.Append(tempStr);
count = sReader.Read(sReaderBuffer, 0, 2560);
sReader.Close();
return content.ToString();
return "";
/// &summary&
/// 调用微信接口获取带参数永久二维码的ticket
/// &/summary&
/// &param name="appid"&&/param&
/// &param name="appsecret"&&/param&
/// &param name="orderNo"&&/param&
/// &returns&&/returns&
public string GetQrcodeYJ(string appid, string appsecret, string orderNo)
string QrcodeUrl = "https://api./cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
string AccessToken = GetAccess_token(appid, appsecret);//拉取AccessToken
QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
string PostJson ="{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \""+orderNo+"\"}}}";
string ReText = postResponse(QrcodeUrl, PostJson);//post提交
return ReT
/// 调用微信接口获取带参数临时二维码的ticket
/// 使用方法:https://mp./cgi-bin/showqrcode?ticket=TICKET
///二维码带的参数
/// json:ticket:换取二维码的凭证,expire_seconds:凭证有效时间,url:二维码解析后的地址。此处返回ticket 否则返回错误码
public string GetQrcode(string appid, string appsecret, string scene_str)
string QrcodeUrl = "https://api./cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
string AccessToken = GetAccess_token(appid, appsecret);//拉取AccessToken
QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": " + scene_str + "}}}";
string ReText = postResponse(QrcodeUrl, PostJson);//此处省略了 WebRequestPostOrGet即为WebHttpRequest发送Post请求
return ReT
/// &summary&
/// 获取微信带参数的二维码图片
/// &/summary&
/// &param name="ticket"&票&/param&
/// &param name="saveSrc"&要保存的地址&/param&
/// &returns&&/returns&
public bool GetCodePic(string ticket,string saveSrc)
string QrcodeUrl = "https://mp./cgi-bin/showqrcode?ticket=" +//WxQrcodeAPI接口
return ImageAction.DownloadPicture(QrcodeUrl, saveSrc);
/// &summary&
/// 获取随机数
/// &/summary&
/// &param name="min"&&/param&
/// &param name="max"&&/param&
/// &returns&&/returns&
public static int GetRandNum(int min, int max)
Random r = new Random(Guid.NewGuid().GetHashCode());
return r.Next(min, max);
#region 微信红包相关
/// &summary&
/// 调用微信支付接口前处理数据,包括sign验证等
/// &/summary&
/// &param name="payForWeiXin"&&/param&
/// &returns&&/returns&
public string DoDataForPayWeiXin(PayWeiXin payForWeiXin)
#region 处理nonce_str随机字符串,不长于 32 位(本程序生成长度为16位的)
string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
payForWeiXin.nonce_str = RandomStr(str, 16);
#endregion
#region 商户信息从config文件中读取
//商户支付密钥key
string key = ConfigurationManager.AppSettings["OwnerKey"].ToString();
payForWeiXin.mch_id = ConfigurationManager.AppSettings["mch_id"].ToString();
//商户 appid
payForWeiXin.wxappid = ConfigurationManager.AppSettings["wxappid"].ToString();
//红包収送者名称
payForWeiXin.send_name = ConfigurationManager.AppSettings["send_name"].ToString();
//红包収放总人数
payForWeiXin.total_num = int.Parse(ConfigurationManager.AppSettings["total_num"].ToString());
//红包祝福诧
payForWeiXin.wishing = ConfigurationManager.AppSettings["wishing"].ToString();
//活劢名称
payForWeiXin.act_name = ConfigurationManager.AppSettings["act_name"].ToString();
//备注信息
payForWeiXin.remark = ConfigurationManager.AppSettings["remark"].ToString();
//调用接口的机器 Ip 地址
payForWeiXin.client_ip = ConfigurationManager.AppSettings["client_ip"].ToString();
#endregion
#region 订单信息
//生成订单号组成: mch_id+yyyymmdd+10 位一天内不能重复的数字
//生成10位不重复的数字
string num = "";
string randomNum = RandomStr(num, 10);
payForWeiXin.mch_billno = payForWeiXin.mch_billno + System.DateTime.Now.ToString("yyyyMMdd") + randomN
#endregion
string postData = @"&xml&
&mch_billno&{0}&/mch_billno&
&mch_id&{1}&/mch_id&
&wxappid&{2}&/wxappid&
&send_name&{3}&/send_name&
&re_openid&{4}&/re_openid&
&total_amount&{5}&/total_amount&
&total_num&{6}&/total_num&
&wishing&{7}&/wishing&
&client_ip&{8}&/client_ip&
&act_name&{9}&/act_name&
&remark&{10}&/remark&
&nonce_str&{11}&/nonce_str&";
postData = string.Format(postData,
payForWeiXin.mch_billno,
payForWeiXin.mch_id,
payForWeiXin.wxappid,
payForWeiXin.send_name,
payForWeiXin.re_openid,
payForWeiXin.total_amount,
payForWeiXin.total_num,
payForWeiXin.wishing,
payForWeiXin.client_ip,
payForWeiXin.act_name,
payForWeiXin.remark,
payForWeiXin.nonce_str
//原始传入参数
string[] signTemp = { "mch_billno=" + payForWeiXin.mch_billno, "mch_id=" + payForWeiXin.mch_id, "wxappid=" + payForWeiXin.wxappid,
"send_name=" + payForWeiXin.send_name, "re_openid=" + payForWeiXin.re_openid, "total_amount=" + payForWeiXin.total_amount,
"total_num=" + payForWeiXin.total_num, "wishing=" + payForWeiXin.wishing, "client_ip=" + payForWeiXin.client_ip, "act_name=" + payForWeiXin.act_name,"remark=" + payForWeiXin.remark, "nonce_str=" + payForWeiXin.nonce_str };
List&string& signList = signTemp.ToList();
#region 处理支付签名
//对signList按照ASCII码从小到大的顺序排序
signList.Sort();
string signOld = string.E
string payForWeiXinOld = string.E
int i = 0;
foreach (string temp in signList)
signOld += temp + "&";
signOld = signOld.Substring(0, signOld.Length - 1);
signOld += "&key=" +
//处理支付签名
payForWeiXin.sign = Encrypt(signOld).ToUpper();
#endregion
postData += "&sign&{0}&/sign&&/xml&";
postData = string.Format(postData, payForWeiXin.sign);
return postD
public string RandomStr(string str, int Length)
string result = string.E
Random rd = new Random();
for (int i = 0; i & L i++)
result += str[rd.Next(str.Length)];
/// &summary&
/// Md5加密
/// &/summary&
/// &param name="s"&&/param&
/// &returns&&/returns&
public static String Encrypt(String s)
MD5 md5 = new MD5CryptoServiceProvider();
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
bytes = puteHash(bytes);
md5.Clear();
string ret = "";
for (int i = 0; i & bytes.L i++)
ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
return ret.PadLeft(32, '0');
/// &summary&
/// 调用微信支付接口
/// &/summary&
/// &param name="payForWeiXin"&&/param&
/// &returns&&/returns&
public string PayForWeiXin(string postData)
string result = string.E
result = PostPage("https://api.mch./mmpaymkttransfers/sendredpack", postData);
catch (Exception ex)
/// &summary&
/// post微信请求
/// &/summary&
/// &param name="posturl"&&/param&
/// &param name="postData"&&/param&
/// &returns&&/returns&
public string PostPage(string posturl, string postData)
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
//CerPath证书路径
string certPath = ConfigurationManager.AppSettings["certPath"].ToString();
certPath = System.Web.HttpContext.Current.Server.MapPath(certPath);
//证书密码
string password = ConfigurationManager.AppSettings["password"].ToString();
X509Certificate2 cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(certPath, password, X509KeyStorageFlags.MachineKeySet);
// 设置参数
request = WebRequest.Create(posturl) as HttpWebR
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieC
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "text/xml";
request.ContentLength = data.L
request.ClientCertificates.Add(cert);
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebR
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.E
catch (Exception ex)
string err = ex.M
return string.E
#endregion
/// &summary&
/// 模拟微信关注
/// &/summary&
public string FocusLike()
string postData = @"&xml&&ToUserName&{0}&/ToUserName&
&FromUserName&{1}&/FromUserName&
&CreateTime&{2}&/CreateTime&
&MsgType&{3}&/MsgType&
&Event&{4}&/Event&
&EventKey&{5}&/EventKey&
&Ticket&{6}&/Ticket&
postData = string.Format(postData,
"okehNt44afCOnburT5b7dXHivlSc",
PostPage1("http://localhost:33700/api/JDFWXService/Service",postData);
/// &summary&
/// post微信请求
/// &/summary&
/// &param name="posturl"&&/param&
/// &param name="postData"&&/param&
/// &returns&&/returns&
public string PostPage1(string posturl, string postData)
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
// 设置参数
request = WebRequest.Create(posturl) as HttpWebR
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieC
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "text/xml";
request.ContentLength = data.L
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebR
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.E
catch (Exception ex)
string err = ex.M
return string.E
微信服务号帮助类
微信红包功能可以参考:csdn的实例下载。
四、开发总结
1.这个功能应该是连接客户比较实用的功能,提高客户的依赖度。
2.开发时调试比较麻烦,我的方法是使用微信服务号的api发送错误日志到我的微信上,另一个方法是自己模拟微信的回调事件(这个方法很好,可以直接在vs中调试)。
阅读(...) 评论()

我要回帖

更多关于 02yj201 的文章

 

随机推荐