123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using System;
- using System.Collections.Generic;
- using Alipay.AopSdk.Core.Util;
- using GxPress.Common.AliPay;
- using GxPress.Common.WechatPay;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
- namespace GxPress.Api.WebControllers
- {
- [Route("api/web/wxpay")]
- [ApiController]
- [Authorize]
- public class WxpayController : Controller
- {
- [HttpGet()]
- [AllowAnonymous]
- public string GetNativePayUrl()
- {
- var nativePay = new NativePay();
- return nativePay.GetPayUrl("111");
- }
- /// <summary>
- /// 回调地址
- /// </summary>
- [HttpGet("notify")]
- [AllowAnonymous]
- public string Callback()
- {
- /* 实际验证过程建议商户添加以下校验。
- 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
- 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
- 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
- 4、验证app_id是否为该商户本身。
- */
- Dictionary<string, string> sArray = GetRequestGet();
- //检查openid和product_id是否返回
- if (!sArray.Keys.Equals("openid") || !sArray.Keys.Equals("product_id"))
- {
- WxPayData res = new WxPayData();
- res.SetValue("return_code", "FAIL");
- res.SetValue("return_msg", "回调数据异常");
- return (res.ToXml());
- }
- //调统一下单接口,获得下单结果
- //string openid = notifyData.GetValue("openid").ToString();
- sArray.TryGetValue("openid", out var openid);
- //string product_id = notifyData.GetValue("product_id").ToString();
- sArray.TryGetValue("product_id", out var product_id);
- WxPayData unifiedOrderResult = new WxPayData();
- try
- {
- unifiedOrderResult = GxPress.Common.WechatPay.WxPayApi.UnifiedOrder(openid, product_id);
- }
- catch (Exception ex)//若在调统一下单接口时抛异常,立即返回结果给微信支付后台
- {
- WxPayData res = new WxPayData();
- res.SetValue("return_code", "FAIL");
- res.SetValue("return_msg", "统一下单失败");
- return (res.ToXml());
- }
- //若下单失败,则立即返回结果给微信支付后台
- if (!unifiedOrderResult.IsSet("appid") || !unifiedOrderResult.IsSet("mch_id") || !unifiedOrderResult.IsSet("prepay_id"))
- {
- WxPayData res = new WxPayData();
- res.SetValue("return_code", "FAIL");
- res.SetValue("return_msg", "统一下单失败");
- //Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + res.ToXml());
- return (res.ToXml());
- //page.Response.End();
- }
-
- //统一下单成功,则返回成功结果给微信支付后台
- WxPayData data = new WxPayData();
- data.SetValue("return_code", "SUCCESS");
- data.SetValue("return_msg", "OK");
- data.SetValue("appid", WxPayConfig.GetConfig().GetAppID());
- data.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID());
- data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
- data.SetValue("prepay_id", unifiedOrderResult.GetValue("prepay_id"));
- data.SetValue("result_code", "SUCCESS");
- data.SetValue("err_code_des", "OK");
- data.SetValue("sign", data.MakeSign());
- // Log.Info(this.GetType().ToString(), "UnifiedOrder success , send data to WeChat : " + data.ToXml());
- return data.ToXml();
- }
- private Dictionary<string, string> GetRequestPost()
- {
- Dictionary<string, string> sArray = new Dictionary<string, string>();
- ICollection<string> requestItem = Request.Form.Keys;
- foreach (var item in requestItem)
- {
- sArray.Add(item, Request.Form[item]);
- }
- return sArray;
- }
- private Dictionary<string, string> GetRequestGet()
- {
- Dictionary<string, string> sArray = new Dictionary<string, string>();
- ICollection<string> requestItem = Request.Query.Keys;
- foreach (var item in requestItem)
- {
- sArray.Add(item, Request.Query[item]);
- }
- return sArray;
- }
- }
- }
|