ResultNotify.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Threading.Tasks;
  2. using System.Web.UI;
  3. using WayneCloud.Models.Models;
  4. namespace Wechat.PayAPI
  5. {
  6. /// <summary>
  7. /// 支付结果通知回调处理类
  8. /// 负责接收微信支付后台发送的支付结果并对订单有效性进行验证,将验证结果反馈给微信支付后台
  9. /// </summary>
  10. public class ResultNotify:Notify
  11. {
  12. public ResultNotify(Page page):base(page)
  13. {
  14. }
  15. public override async Task ProcessNotify(WxPayConfig config)
  16. {
  17. WxPayData notifyData = GetNotifyData();
  18. //检查支付结果中transaction_id是否存在
  19. if (!notifyData.IsSet("transaction_id"))
  20. {
  21. //若transaction_id不存在,则立即返回结果给微信支付后台
  22. WxPayData res = new WxPayData();
  23. res.SetValue("return_code", "FAIL");
  24. res.SetValue("return_msg", "支付结果中微信订单号不存在");
  25. Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
  26. page.Response.Write(res.ToXml());
  27. page.Response.End();
  28. }
  29. string transaction_id = notifyData.GetValue("transaction_id").ToString();
  30. //查询订单,判断订单真实性
  31. if ((await QueryOrder(transaction_id, null)) == false)
  32. {
  33. //若订单查询失败,则立即返回结果给微信支付后台
  34. WxPayData res = new WxPayData();
  35. res.SetValue("return_code", "FAIL");
  36. res.SetValue("return_msg", "订单查询失败");
  37. Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
  38. page.Response.Write(res.ToXml());
  39. page.Response.End();
  40. }
  41. //查询订单成功
  42. else
  43. {
  44. WxPayData res = new WxPayData();
  45. res.SetValue("return_code", "SUCCESS");
  46. res.SetValue("return_msg", "OK");
  47. Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
  48. page.Response.Write(res.ToXml());
  49. page.Response.End();
  50. }
  51. }
  52. //查询订单
  53. private async Task<bool> QueryOrder(string transaction_id, WxPayConfig config)
  54. {
  55. WxPayData req = new WxPayData();
  56. req.SetValue("transaction_id", transaction_id);
  57. WxPayData res = await WxPayApi.OrderQuery(req, config);
  58. if (res.GetValue("return_code").ToString() == "SUCCESS" &&
  59. res.GetValue("result_code").ToString() == "SUCCESS")
  60. {
  61. return true;
  62. }
  63. else
  64. {
  65. return false;
  66. }
  67. }
  68. }
  69. }