C#微信开发之旅(十二):V2告警接口&维权接口

告警接口,是微信用来通知我们一样警告信息,可以存储到DB定期查看并解决;维权则是用户主动发起的,需要我们处理。。。。

  1      /// <summary>
  2         /// 维权通知
  3         /// </summary>
  4         /// <returns></returns>
  5         public void Notice()
  6         {
  7             #region 用户新增维权
  8
  9             /*
 10              * <xml>
 11              * <OpenId><![CDATA[o0pk9uIVnlY-fJkzFKEbQ6LJ4cFc]]></OpenId>
 12              * <AppId><![CDATA[wxc04ce1d87dcd13cd]]></AppId>
 13              * <TimeStamp>1401206434</TimeStamp>
 14              * <MsgType><![CDATA[request]]></MsgType>
 15              * <FeedBackId>13275936403980775178</FeedBackId>
 16              * <TransId><![CDATA[1218614901201405273313470595]]></TransId>
 17              * <Reason><![CDATA[没有收到货品]]></Reason>
 18              * <Solution><![CDATA[退款,并不退货]]></Solution>
 19              * <ExtInfo><![CDATA[Test 13456780012]]></ExtInfo>
 20              * <AppSignature><![CDATA[1f4a626f59f9ae8007158b0a9510e88db56fa80b]]></AppSignature>
 21              * <SignMethod><![CDATA[sha1]]></SignMethod>
 22              * </xml>
 23              */
 24             #endregion
 25
 26             #region 用户确认处理完毕投诉
 27             /*
 28              * <xml>
 29              * <OpenId><![CDATA[111222]]></OpenId>
 30              * <AppId><![CDATA[wwwwb4f85f3a797777]]></AppId>
 31              * <TimeStamp>1369743511</TimeStamp>
 32              * <MsgType><![CDATA[confirm/reject]]></MsgType>
 33              * <FeedBackId><![CDATA[5883726847655944563]]></FeedBackId>
 34              * <Reason><![CDATA[商品质量有问题]]></Reason>
 35              * <AppSignature><![CDATA[bafe07f060f22dcda0bfdb4b5ff756f973aecffa]]></AppSignature>
 36              * <SignMethod><![CDATA[sha1]]></SignMethod>
 37              * </xml>
 38              */
 39             #endregion
 40
 41             try
 42             {
 43                 string xmlString = GetXmlString(Request);
 44                 XmlDocument xml = new XmlDocument();
 45                 xml.LoadXml(xmlString);
 46                 //记录日志
 47
 48                 //维权处理
 49                 var msgType = xml.SelectSingleNode("/xml/MsgType").InnerText.ToLower();
 50
 51                 switch (msgType)
 52                 {
 53                     case "request":
 54                         //用户新增维权
 55                         //dosomething()
 56                         break;
 57                     case "confirm/reject":
 58                         //用户确认处理完毕投诉  相关操作
 59                         //dosomething()
 60                         break;
 61                     default:
 62                         break;
 63                 }
 64                 Response.Write("success");
 65             }
 66             catch (Exception ex)
 67             {
 68                 //记录日志
 69                 Response.Write(ex.Message);
 70             }
 71             Response.End();
 72         }
 73
 74         /// <summary>
 75         /// 告警通知
 76         /// </summary>
 77         /// <returns></returns>
 78         public void Warning()
 79         {
 80             #region Xml格式
 81             /*
 82              * <xml>
 83              * <AppId><![CDATA[wxf8b4f85f3a794e77]]></AppId>
 84              * <ErrorType>1001</ErrorType>
 85              * <Description><![CDATA[错识描述]]></Description>
 86              * <AlarmContent><![CDATA[错误详情]]></AlarmContent>
 87              * <TimeStamp>1393860740</TimeStamp>
 88              * <AppSignature><![CDATA[f8164781a303f4d5a944a2dfc68411a8c7e4fbea]]></AppSignature>
 89              * <SignMethod><![CDATA[sha1]]></SignMethod>
 90              * </xml>
 91              */
 92             #endregion
 93
 94             try
 95             {
 96                 string xmlString = GetXmlString(Request);
 97                 XmlDocument xml = new XmlDocument();
 98                 xml.LoadXml(xmlString);
 99                 //记录日志
100
101                 //写到db 或其他处理
102
103                 Response.Write("success");
104             }
105             catch (Exception ex)
106             {
107                 //记录日志
108                 Response.Write(ex.Message);
109             }
110             Response.End();
111         }
112
113         /// <summary>
114         /// 获取Post Xml数据
115         /// </summary>
116         /// <param name="request"></param>
117         /// <returns></returns>
118         private string GetXmlString(HttpRequestBase request)
119         {
120             using (System.IO.Stream stream = request.InputStream)
121             {
122                 Byte[] postBytes = new Byte[stream.Length];
123                 stream.Read(postBytes, 0, (Int32)stream.Length);
124                 return System.Text.Encoding.UTF8.GetString(postBytes);
125             }
126         }
时间: 2024-10-05 19:10:21

C#微信开发之旅(十二):V2告警接口&维权接口的相关文章

C#微信开发之旅(十三):V2订单查询&amp;退款(完结)

订单查询 用处同V3订单查询,直接上代码: 1 /// <summary> 2 /// V2订单查询 3 /// </summary> 4 public void QueryOrder() 5 { 6 string orderNo = string.Empty; 7 8 WxPayModel model = WxPayModel.Create(orderNo); 9 OrderQueryMessage message = WeiXinHelper.OrderQuery(model.

C#微信开发之旅(十):APP预支付及支付参数生成(V2)

App支付流程: 本篇随笔只实现红框内的两个功能:生成预支付Id,生成app支付参数 1 /// <summary> 2 /// App 预支付 3 /// </summary> 4 /// <returns></returns> 5 public ActionResult AppPrePay() 6 { 7 string orderNo = ""; //订单编号,文档中的out_trade_no 8 string description

C#微信开发之旅(十一):V2发货接口

用户支付完成后,V2版本微信支付需要调用发货接口,否则微信会告警并且用户也可以进行维权,总之会有灰常多的事情: 1 public void DeliverNotify() 2 { 3 string openId = string.Empty; //买家openid 4 string transactionId = string.Empty;//微信交易单号 5 string orderNo = string.Empty;//我们自己的订单号,文档中的out_trade_no 6 7 8 WxPa

C#微信开发之旅(二):基础类之HttpClientHelper

包含通过HttpClient发起get或post请求的方法,所有调用微信接口的操作都通过此类.话不多说,直接上代码: 1 public class HttpClientHelper 2 { 3 /// <summary> 4 /// get请求 5 /// </summary> 6 /// <param name="url"></param> 7 /// <returns></returns> 8 public s

C#微信开发之旅(三):AccessToken获取及全局管理

由于AccessToken有效期为2小时,并且接口调用有数量限制,所以开始时选择用WCF做了全局管理(项目中要到AccessToken的地方太多了,支付相关.生成二维码.获取用户信息.菜单操作等等) 下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回): 1 /// <summary> 2 /// AccessToken类,公众号通过此token 获取相关信息 (单例类) 3

Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAuth2.0的运作模式: 从上图我们可以看到,整个过程进行了2次"握手",最终利用授权的AccessToken进行一系列的请求,相关的过程说明如下: A:由客户端向服务器发出验证请求,请求中一般会携带这些参数 ID标识,例如appId 验证后跳转到的URL(redirectUrl) 状态参数

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

QT开发(五十二)———QML语言

QT开发(五十二)---QML语言 QML是一种声明语言,用于描述程序界面.QML将用户界面分解成一块块小的元素,每一元素都由很多组件构成.QML定义了用户界面元素的外观和行为:更复杂的逻辑则可以结合JavaScript脚本实现. 一.QML基础语法 1.Import语句 QML代码中,import语句一般写在头几行,主要用途如下:     A.包含类型的全名空间     B.包含QML代码文件的目录     C.JavaScript代码文件 格式如下: import Namespace Ver

QT开发(六十二)———QT5解析Json文件

QT开发(六十二)---QT5解析Json文件 一.QT5 Json简介 QT4中使用第三方库QJson解析JSON文件. QT5新增加了处理JSON的类,类均以QJson开头,包含在QtCore模块中.QT5新增加六个相关类: QJsonArray 封装 JSON 数组 QJsonDocument 读写 JSON 文档 QJsonObject 封装 JSON 对象 QJsonObject::iterator 用于遍历QJsonObject的STL风格的非const遍历器 QJsonParseE