微信支付后台服务器返回的接口通知notify_url(回调接口设计)-C/S框架网
作者:作者不详  发布日期:2019-04-16 10:15:23
  微信支付后台服务器返回的接口通知notify_url(回调接口设计)-C/S框架网


微信回调接口POST过来的XML数据:

微信回调接口POST过来的XML数据:

<xml>
<appid><![CDATA[wx44495463a43bc]]></appid>
<bank_type><![CDATA[CMB_CREDIT]]></bank_type>
<cash_fee><![CDATA[20]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[N]]></is_subscribe>
<mch_id><![CDATA[152742222]]></mch_id>
<nonce_str><![CDATA[6OQ37L7i6JN1PRLD]]></nonce_str>
<openid><![CDATA[oCohp1HFxLcx-o5QdA-hLc2ios8]]></openid>
<out_trade_no><![CDATA[1555331433589231953]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[6C6A7CB3F3C742D0AE56687A10F4EA31]]></sign>
<time_end><![CDATA[20190415203040]]></time_end>
<total_fee>20</total_fee><trade_type>
<![CDATA[APP]]></trade_type>
<transaction_id><![CDATA[4200000290201904150837155038]]></transaction_id>
</xml>

//来源:C/S框架网(www.csframework.com) QQ:23404761



微信回调接口设计要求:


1,notify_url:回调通知接口HTTP地址,POST请求,不能是IP地址(必须是域名)不能带端口,预设80端口。

参考: http://www.xxxx.com/notify_url.aspx


2,必须是外网能访问HTTP地址,POST方式,微信服务器POST XML数据过来,请使用PostMan工具调试。


3,微信回调的接口中完成更改商户数据库的订单状态,操作成功给微信返回xml数据,这样微信后台就认为这笔订单交易成功,不会再次回调接口。


详情参考微信API接口说明:






更改商户数据库的订单状态:

贴图图片-微信截图_20190416095722



DBHelper类,引用多数据库底层接口IDatabase。

参考:C#多数据库组件包支持MSSQL+Oracle+MySQL+用户操作手册

C# Code:

using CSFramework.DB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// DBHelper数据层
/// </summary>
public static class DBHelper
{
   //日志数据库
   private static IDatabase CreateLogDB()
   {
      string conn_log = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["Simidata_LogDB"].ToString();
      return DatabaseFactory.CreateDatabase(DatabaseType.SqlServer, conn_log);
   }
   
   //业务数据库
   private static IDatabase CreateSimidataDB()
   {
      string conn_log = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["Simidata"].ToString();
      return DatabaseFactory.CreateDatabase(DatabaseType.SqlServer, conn_log);
   }
   
   /// <summary>
   /// 写日志
   /// </summary>
   /// <param name="logType">日志类型</param>
   /// <param name="content">内容</param>
   /// <param name="ip">IP</param>
   public static void WriteLog(string logType, string content, string ip)
   {
      string sql = "INSERT INTO dbo.sys_Log(TS,IP,LogType,LogContent) SELECT GETDATE(),@IP,@LogType,@LogContent";
      IDatabase db = CreateLogDB();
      CommandHelper cmd = db.CreateCommand(sql);
      cmd.AddParam("@IP", ip);
      cmd.AddParam("@LogType", logType);
      cmd.AddParam("@LogContent", content);
      db.ExecuteCommand(cmd.Command);
   }
   
   /// <summary>
   /// 更新本地数据库订单状态
   /// </summary>
   /// <param name="orderID">订单编号</param>
   /// <param name="success">true/false</param>
   /// <param name="WxTransactionID">微信交易号</param>
   /// <param name="amount">金额(分)</param>
   /// <returns></returns>
   public static bool UpdateOrderState(string orderID, bool success, string WxTransactionID, int amount)
   {
      string sql = "UPDATE dbo.tb_PayTransList SET FlagTrans=2,WxCallbackTime=GETDATE(),WxTransactionID=@WxTransactionID WHERE MerID=@MerID AND Amount*100=@Amount";
      
      IDatabase db = CreateSimidataDB ();
      CommandHelper cmd = db.CreateCommand(sql);
      cmd.AddParam("@WxTransactionID", WxTransactionID);
      cmd.AddParam("@MerID", orderID);
      cmd.AddParam("@Amount", amount);
      int i = db.ExecuteCommand(cmd.Command);
      return i == 1;
   }
}

//来源:C/S框架网(www.csframework.com) QQ:23404761



使用PostMan测试notify_url地址:


贴图图片-微信截图_20190416092332


必须返回XML格式的数据给微信服务器:


C# Code:

<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>



商户本地数据库的日志信息:


贴图图片-微信截图_20190416092452





WebApi服务端开发框架


.NET WebApi开发框架|MVC框架|后端框架|服务端框架




点击下载附件 (VIP会员下载) 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇