public async Task <IActionResult> ReceivePayResult()
        {
            if (!Request.Headers.TryGetValue("Wechatpay-Nonce", out var nonce) ||
                !Request.Headers.TryGetValue("Wechatpay-Signature", out var signature) ||
                !Request.Headers.TryGetValue("Wechatpay-Timestamp", out var timestamp) ||
                !Request.Headers.TryGetValue("Wechatpay-Serial", out var serial))
            {
                return(Content("非合法的微信通知请求!"));
            }

            string strContent;

            using (var reader = new StreamReader(Request.Body))
            {
                strContent = await reader.ReadToEndAsync();
            }

            var res = await WechatPayHelper.Verify(WechatPayHelper.pay_config, signature.ToString(), serial.ToString(),
                                                   nonce.ToString(), timestamp.ToString().ToInt64(), strContent);

            // 签名正确
            if (res.IsSuccess())
            {
                var encryptResult = JsonSerializer.Deserialize <NotifyPayEncryptResult>(strContent);
                // 获取真实的结果
                var result = encryptResult?.resource.DecrytToPayResult(WechatPayHelper.pay_config.api_v3_key);

                //  do something big
            }
            return(new JsonResult(new { code = "SUCCESS" }));
        }
Esempio n. 2
0
        /// <summary>
        /// 根据订单号(微信订单号、商户订单号二选一,优先微信订单号)查询订单信息
        /// 文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
        /// </summary>
        /// <param name="orderNumber">订单号码,支持微信订单号与商户订单号,优先微信订单号</param>
        /// <param name="nonceStr">随机字符串,默认null,自动生成</param>
        /// <param name="orderNoType">订单号类型,默认微信订单号</param>
        /// <param name="signType">签名类型(默认MD5)</param>
        public async Task <QueryOrderResponse> QueryOrder(string orderNumber, string nonceStr = null, OrderNumberType orderNoType = OrderNumberType.WechatOrderNumber, SignType signType = SignType.MD5)
        {
            var queryOrderReq = new QueryOrderRequest()
            {
                NonceStr = nonceStr ?? RandomHelper.GenerateNonceStr(),
                SignType = signType
            };

            if (orderNoType == OrderNumberType.MerchantOrderNumber)
            {
                queryOrderReq.OutTradeNo = orderNumber;
            }
            else
            {
                queryOrderReq.TransactionId = orderNumber;
            }
            return(await WechatPayHelper.QueryOrder(PAY_BASE_INFO, queryOrderReq));
        }
        /// <summary>
        ///   转化为微信通知的实体(包含验证签名
        /// </summary>
        /// <param name="receiver"></param>
        /// <returns></returns>
        public static async Task <WechatNotifyEncryptResult> ToNotifyEncryptResult(this WechatNotifyReceiver receiver)
        {
            var config = WechatPayHelper.pay_config;

            if (!receiver.header_dics.TryGetValue("Wechatpay-Nonce", out var nonce) ||
                !receiver.header_dics.TryGetValue("Wechatpay-Signature", out var signature) ||
                !receiver.header_dics.TryGetValue("Wechatpay-Timestamp", out var timestamp) ||
                !receiver.header_dics.TryGetValue("Wechatpay-Serial", out var serial))
            {
                return(new WechatNotifyEncryptResult().WithResp(RespCodes.ParaError, "微信支付通知头部参数异常!"));
            }

            var checkRes = await WechatPayHelper.Verify(config, signature, serial, nonce, timestamp.ToInt64(), receiver.body);

            // 签名正确
            if (checkRes.IsSuccess())
            {
                var wRes = JsonSerializer.Deserialize <WechatNotifyEncryptResult>(receiver.body);
                return(wRes ?? new WechatNotifyEncryptResult().WithResp(RespCodes.OperateFailed, "微信支付通知内容异常!"));
            }
            return(new WechatNotifyEncryptResult().WithResp(checkRes));
        }