Пример #1
0
        public async Task <IActionResult> MiniProgramPay(WeChatPayMiniProgramPayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpBillCreateIp = viewModel.SpBillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType,
                OpenId         = viewModel.OpenId
            };

            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);

            if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
            {
                var req = new WeChatPayMiniProgramSdkRequest
                {
                    Package = "prepay_id=" + response.PrepayId
                };

                var parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value);

                // 将参数(parameter)给 小程序前端
                // 让他调起支付API(https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5)
                // ViewData["parameter"] = JsonSerializer.Serialize(parameter); ViewData["response"]
                // = response.Body;
                return(Ok(response.Body));
            }

            return(Ok(response.Body));
        }
Пример #2
0
        /// <summary>
        /// 生成支付订单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <PaymentOrderResponse> GeneratePaymentOrder(GeneratePaymentOrderRequest request)
        {
            var ip      = _accessor.HttpContext.Connection.RemoteIpAddress.ToString();
            var hostUrl = _accessor.HttpContext.Request.GetHostUrl();

            var wxRequest = new WeChatPayUnifiedOrderRequest
            {
                Body           = request.Subject,
                OutTradeNo     = request.OrderNo,
                TotalFee       = request.TotalFee,
                OpenId         = request.OpenId,
                TradeType      = "JSAPI",
                SpBillCreateIp = ip,
                NotifyUrl      = $"{hostUrl}/api/v1/payment/notify/unifiedorder/{request.OrderNo}"
            };

            var response = await _client.ExecuteAsync(wxRequest, _wechatPayOption);

            if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
            {
                var req = new WeChatPayMiniProgramSdkRequest
                {
                    Package = $"prepay_id={response.PrepayId}"
                };
                var parameter = await _client.ExecuteAsync(req, _wechatPayOption);

                var json = JsonConvert.SerializeObject(parameter);
                return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json));
            }

            throw new Exception(response.ErrCodeDes);
        }
Пример #3
0
        public async Task <IActionResult> MiniProgramPay(WeChatPayPubPayV3ViewModel viewModel)
        {
            var model = new WeChatPayTransactionsJsApiBodyModel
            {
                AppId  = _optionsAccessor.Value.AppId,
                MchId  = _optionsAccessor.Value.MchId,
                Amount = new Amount {
                    Total = viewModel.Total, Currency = "CNY"
                },
                Description = viewModel.Description,
                NotifyUrl   = viewModel.NotifyUrl,
                OutTradeNo  = viewModel.OutTradeNo,
                Payer       = new PayerInfo {
                    OpenId = viewModel.OpenId
                }
            };

            var request = new WeChatPayTransactionsJsApiRequest();

            request.SetBodyModel(model);

            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);

            if (!response.IsError)
            {
                var req = new WeChatPayMiniProgramSdkRequest
                {
                    Package = "prepay_id=" + response.PrepayId
                };

                var parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value);

                // 将参数(parameter)给 小程序端
                // https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_4.shtml
                ViewData["parameter"] = JsonSerializer.Serialize(parameter);
                ViewData["response"]  = response.Body;
                return(View());
            }

            ViewData["response"] = response.Body;
            return(View());
        }