示例#1
0
        public async Task <PaymentOrderBaseResponse> GeneratePaymentOrder(PaymentOrderRequest request)
        {
            var apiHost = await _appSettingService.Get(ShopKeys.ApiHost);

            var wxRequest = new WeChatPayUnifiedOrderRequest
            {
                Body           = request.Subject,
                OutTradeNo     = request.OrderNo,
                TotalFee       = Convert.ToInt32(request.TotalAmount * 100),
                OpenId         = request.OpenId,
                TradeType      = "JSAPI",
                SpbillCreateIp = "127.0.0.1",
                NotifyUrl      = $"{apiHost.Trim('/')}/api/mp/pay/notify/{request.OrderNo}",
            };
            var response = await _client.ExecuteAsync(wxRequest);

            if (response?.ReturnCode == "SUCCESS" && response?.ResultCode == "SUCCESS")
            {
                var req = new WeChatPayLiteAppCallPaymentRequest
                {
                    Package = "prepay_id=" + response.PrepayId
                };

                // https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
                // 将参数(parameter)给 小程序前端 让他调起支付API
                var parameter = await _client.ExecuteAsync(req);

                var json = JsonConvert.SerializeObject(parameter);
                return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json));
            }
            throw new Exception(response?.ReturnMsg);
        }
示例#2
0
        public async Task <IActionResult> AppOrder(string out_trade_no, string body, int total_fee, string spbill_create_ip, string notify_url, string trade_type)
        {
            var request = new WeChatPayUnifiedOrderRequest()
            {
                OutTradeNo     = out_trade_no,
                Body           = body,
                TotalFee       = total_fee,
                SpbillCreateIp = spbill_create_ip,
                NotifyUrl      = notify_url,
                TradeType      = trade_type,
            };
            var response = await _client.ExecuteAsync(request);

            // 组合"调起支付接口"所需参数 :

            var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var timeStamp = (long)((DateTime.Now - unixEpoch).TotalSeconds);

            var dic = new WeChatPayDictionary
            {
                { "appid", _client.Options.AppId },
                { "partnerid", _client.Options.MchId },
                { "prepayid", response.PrepayId },
                { "package", "Sign=WXPay" },
                { "noncestr", Guid.NewGuid().ToString("N") },
                { "timestamp", timeStamp.ToString() }
            };

            // 将这些参数签名
            dic.Add("sign", WeChatPaySignature.SignWithKey(dic, _client.Options.Key));

            // 将签名后的参数(dic)给 ios/android端 由其去调起微信APP(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)
            return(Ok(dic));
        }
示例#3
0
        // 扫码支付
        public async Task <PayQrResult> QrCodePay(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Order_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.NATIVE
            };

            // res.CodeUrl 给前端生成二维码
            logger.LogDebug($"Wepay QrCodePay begin with: {request.Id}");
            var res = await client.ExecuteAsync(req, options.Value);

            if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS")
            {
                logger.LogDebug($"Wepay QrCodePay end with: {request.Id} SUCCESS");
                return(new PayQrResult
                {
                    Success = true,
                    CodeUrl = res.CodeUrl,
                    Params = res.ResponseParameters
                });
            }

            logger.LogDebug($"Wepay QrCodePay end with: {request.Id} Fail: {res.ErrCode}:{res.ErrCodeDes}");
            return(new PayQrResult
            {
                Success = false,
                Error = $"{res.ErrCode}:{res.ErrCodeDes}"
            });
        }
示例#4
0
        public async Task <IActionResult> AppPay(WeChatPayAppPayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpBillCreateIp = viewModel.SpBillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType
            };
            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);

            if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
            {
                var req = new WeChatPayAppSdkRequest
                {
                    PrepayId = response.PrepayId
                };

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

                // 将参数(parameter)给 ios/android端
                // 让他调起微信APP(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)
                // ViewData["parameter"] = JsonSerializer.Serialize(parameter); ViewData["response"]
                // = response.Body;
                return(Ok(response.Body));
            }

            return(Ok(response.Body));
        }
示例#5
0
        public async Task <IActionResult> PubPay(WeChatPayPubPayViewModel 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 WeChatPayJsApiSdkRequest
                {
                    Package = "prepay_id=" + response.PrepayId
                };

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

                // 将参数(parameter)给 公众号前端
                // 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
                // ViewData["parameter"] = JsonSerializer.Serialize(parameter); ViewData["response"]
                // = response.Body;
                return(Ok(response.Body));
            }

            //ViewData["response"] = response.Body;
            return(Ok(response.Body));
        }
示例#6
0
        public async Task <IActionResult> LiteAppPay(WeChatPayLiteAppPayViewModel 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 == "SUCCESS" && response.ResultCode == "SUCCESS")
            {
                var req = new WeChatPayLiteAppSdkRequest
                {
                    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"] = JsonConvert.SerializeObject(parameter);
                ViewData["response"]  = response.ResponseBody;
                return(View());
            }
            ViewData["response"] = response.ResponseBody;
            return(View());
        }
示例#7
0
        // APP支付
        public async Task <WeChatPayDictionary> AppPay(PayRequest request)
        {
            var order = orderService.GetByRef(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Pay_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.APP
            };

            var res = await client.ExecuteAsync(req, options.Value);

            if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS")
            {
                var appReq = new WeChatPayAppSdkRequest
                {
                    PrepayId = res.PrepayId
                };

                // 将参数(parameter)给 ios/android端 让他调起微信APP
                // https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
                return(await client.ExecuteAsync(appReq, options.Value));
            }

            throw new AceException($"APP支付错误:{res.ErrCode}:{res.ErrCodeDes}");
        }
示例#8
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);
        }
示例#9
0
        // 公众号支付
        public async Task <WeChatPayDictionary> PubPay(PayRequest request)
        {
            var order = orderService.GetByRef(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Pay_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.JSAPI,
                OpenId         = request.OpenId
            };

            var res = await client.ExecuteAsync(req, options.Value);

            if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS")
            {
                var jsapiReq = new WeChatPayJsApiSdkRequest
                {
                    Package = "prepay_id=" + res.PrepayId
                };

                // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付
                // https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
                return(await client.ExecuteAsync(jsapiReq, options.Value));
            }

            throw new AceException($"公众号支付错误:{res.ErrCode}:{res.ErrCodeDes}");
        }
        public async Task <IActionResult> AppPay(WeChatPayAppPayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest()
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpbillCreateIp = viewModel.SpbillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType,
            };
            var response = await _client.ExecuteAsync(request);

            if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
            {
                var req = new WeChatPayAppCallPaymentRequest()
                {
                    PrepayId = response.PrepayId,
                };
                var parameter = await _client.ExecuteAsync(req);

                // 将参数(parameter)给 ios/android端 让他调起微信APP(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)
                ViewData["parameter"] = JsonConvert.SerializeObject(parameter);
                ViewData["response"]  = response.Body;
                return(View());
            }
            ViewData["response"] = response.Body;
            return(View());
        }
        public async Task <IActionResult> PubPay(WeChatPayPubPayViewModel 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);

            if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
            {
                var req = new WeChatPayH5CallPaymentRequest()
                {
                    Package = "prepay_id=" + response.PrepayId,
                };
                var parameter = await _client.ExecuteAsync(req);

                // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
                ViewData["parameter"] = JsonConvert.SerializeObject(parameter);
                ViewData["response"]  = response.Body;
                return(View());
            }
            ViewData["response"] = response.Body;
            return(View());
        }
        public async Task <IActionResult> H5Pay(WeChatPayH5PayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest()
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpbillCreateIp = viewModel.SpbillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType,
            };
            var response = await _client.ExecuteAsync(request);

            // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。
            return(Redirect(response.MwebUrl));
        }
示例#13
0
        public async Task <IActionResult> UnifiedOrder(string out_trade_no, string body, int total_fee, string spbill_create_ip, string notify_url, string trade_type, string openid)
        {
            var request = new WeChatPayUnifiedOrderRequest()
            {
                OutTradeNo     = out_trade_no,
                Body           = body,
                TotalFee       = total_fee,
                SpbillCreateIp = spbill_create_ip,
                NotifyUrl      = notify_url,
                TradeType      = trade_type,
                OpenId         = openid,
            };
            var response = await _client.ExecuteAsync(request);

            return(Ok(response.Body));
        }
示例#14
0
        public async Task <IActionResult> H5Pay(WeChatPayH5PayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest()
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpbillCreateIp = viewModel.SpbillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType,
            };
            var response = await _client.ExecuteAsync(request);

            ViewData["response"] = response.Body;
            return(View());
        }
示例#15
0
        // 扫码支付
        public async Task <WeChatPayUnifiedOrderResponse> QrCodePay(PayRequest request)
        {
            var order = orderService.GetByRef(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Pay_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.NATIVE
            };

            // res.CodeUrl 给前端生成二维码
            return(await client.ExecuteAsync(req, options.Value));
        }
示例#16
0
        public async Task <PaymentOrderBaseResponse> GeneratePaymentOrder(PaymentOrderRequest request)
        {
            var ip = Dns.GetHostEntry(Dns.GetHostName())
                     .AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString()
                     ?? "127.0.0.1";

            var apiHost = await _appSettingService.Get(ShopKeys.ApiHost);

            var wxRequest = new WeChatPayUnifiedOrderRequest
            {
                Body       = request.Subject,
                OutTradeNo = request.OrderNo,
                TotalFee   = Convert.ToInt32(request.TotalAmount * 100),
                OpenId     = request.OpenId,
                TradeType  = "JSAPI",
                //SpbillCreateIp = "127.0.0.1",
                SpBillCreateIp = ip,
                NotifyUrl      = $"{apiHost.Trim('/')}/api/mp/pay/notify/{request.OrderNo}",
            };

            var config = await _appSettingService.Get <MiniProgramOptions>();

            var opt = new WeChatPayOptions()
            {
                AppId  = config.AppId,
                MchId  = config.MchId,
                Secret = config.AppSecret,
                Key    = config.Key
            };
            var response = await _client.ExecuteAsync(wxRequest, opt);

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

                // https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
                // 将参数(parameter)给 小程序前端 让他调起支付API
                var parameter = await _client.ExecuteAsync(req, opt);

                var json = JsonConvert.SerializeObject(parameter);
                return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json));
            }
            throw new Exception(response?.ReturnMsg);
        }
示例#17
0
        public async Task <IActionResult> PubPay(string body, string out_trade_no, int total_fee, string spbill_create_ip, string notify_url, string trade_type, string openid)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = body,
                OutTradeNo     = out_trade_no,
                TotalFee       = total_fee,
                SpbillCreateIp = spbill_create_ip,
                NotifyUrl      = notify_url,
                TradeType      = trade_type,
                OpenId         = openid
            };
            var response = await _client.ExecuteAsync(request);

            ResponseModel responseModel = new ResponseModel()
            {
                code = HTTPResponseCode.PartialContent,
                data = response.Body
            };

            Dictionary <string, string> result = new Dictionary <string, string>();

            result.Add("return_code", response.ReturnCode);
            result.Add("return_msg", response.ReturnMsg);

            if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
            {
                var req = new WeChatPayH5CallPaymentRequest
                {
                    Package = "prepay_id=" + response.PrepayId
                };
                var parameter = await _client.ExecuteAsync(req);

                // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
                result.Add("parameter", JsonConvert.SerializeObject(parameter));
                responseModel.code = HTTPResponseCode.Successful;
            }
            else
            {
                responseModel.code = HTTPResponseCode.BadRequest;
                result.Add("err_code", response.ErrCode);
                result.Add("err_code_des", response.ErrCodeDes);
            }
            responseModel.message = JsonConvert.SerializeObject(result);
            return(Json(responseModel));
        }
示例#18
0
        public async Task <IActionResult> QrCodePay(WeChatPayQrCodePayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpBillCreateIp = viewModel.SpBillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType
            };
            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);

            // response.CodeUrl 给前端生成二维码
            ViewData["qrcode"]   = response.CodeUrl;
            ViewData["response"] = response.ResponseBody;
            return(View());
        }
示例#19
0
        // H5支付
        public async Task <WeChatPayUnifiedOrderResponse> H5Pay(PayRequest request)
        {
            var order = orderService.GetByRef(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Pay_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.MWEB
            };

            // mweb_url为拉起微信支付收银台的中间页面
            // 可通过访问该url来拉起微信客户端完成支付
            // res.mweb_url的有效期为5分钟
            return(await client.ExecuteAsync(req, options.Value));
        }
示例#20
0
        public async Task <IActionResult> H5Pay(WeChatPayH5PayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = viewModel.Body,
                OutTradeNo     = viewModel.OutTradeNo,
                TotalFee       = viewModel.TotalFee,
                SpBillCreateIp = viewModel.SpBillCreateIp,
                NotifyUrl      = viewModel.NotifyUrl,
                TradeType      = viewModel.TradeType
            };

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

            // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。
            ViewData["response"] = response.Body;
            return(View());
        }
示例#21
0
        public async Task <IActionResult> H5Pay(string body, string out_trade_no, int total_fee, string spbill_create_ip, string notify_url, string trade_type)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = body,
                OutTradeNo     = out_trade_no,
                TotalFee       = total_fee,
                SpbillCreateIp = spbill_create_ip,
                NotifyUrl      = notify_url,
                TradeType      = trade_type
            };
            var response = await _client.ExecuteAsync(request);

            // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。
            //return Redirect(response.MwebUrl);

            ResponseModel responseModel = new ResponseModel()
            {
                code = HTTPResponseCode.PartialContent,
                data = response.Body
            };

            Dictionary <string, string> result = new Dictionary <string, string>();

            result.Add("return_code", response.ReturnCode);
            result.Add("return_msg", response.ReturnMsg);

            if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
            {
                // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。
                result.Add("mweb_url", response.MwebUrl);
                responseModel.code = HTTPResponseCode.Successful;
            }
            else
            {
                responseModel.code = HTTPResponseCode.BadRequest;
                result.Add("err_code", response.ErrCode);
                result.Add("err_code_des", response.ErrCodeDes);
            }
            responseModel.message = JsonConvert.SerializeObject(result);
            return(Json(responseModel));
        }
示例#22
0
        // 公众号支付
        public async Task <PayResult> PubPay(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Order_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.JSAPI,
                OpenId         = request.OpenId
            };

            logger.LogDebug($"Wepay PubPay begin with: {request.Id}");
            var res = await client.ExecuteAsync(req, options.Value);

            if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS")
            {
                var jsapiReq = new WeChatPayJsApiSdkRequest
                {
                    Package = "prepay_id=" + res.PrepayId
                };

                logger.LogDebug($"Wepay PubPay begin with: {request.Id} SUCCESS");

                // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付
                // https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
                return(new PayResult
                {
                    Success = true,
                    Params = await client.ExecuteAsync(jsapiReq, options.Value)
                });
            }

            logger.LogDebug($"Wepay PubPay end with: {request.Id} Fail: {res.ErrCode}:{res.ErrCodeDes}");
            return(new PayResult
            {
                Success = false,
                Error = $"{res.ErrCode}:{res.ErrCodeDes}"
            });
        }
示例#23
0
        public async Task <IActionResult> PubPay(WeChatPayPubPayViewModel viewModel)
        {
            var request = new WeChatPayUnifiedOrderRequest
            {
                Body           = "测试商品",                                  //商品名称
                OutTradeNo     = DateTime.Now.ToString("yyyyMMhhddmmss"), //单号
                TotalFee       = 120,                                     //金额*100
                SpbillCreateIp = "111.231.71.111",                        //获取终端Ip,
                NotifyUrl      = "http://www.shhjy.cn/access/unifiedorder",
                // viewModel.NotifyUrl


                TradeType = "JSAPI",                       //viewModel.TradeType,
                OpenId    = "or1ZywUA0RJl6glVkPZC1a7h-Us8" //viewModel.OpenId//

                                                           //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);

            if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
            {
                var req = new WeChatPayH5CallPaymentRequest
                {
                    Package = "prepay_id=" + response.PrepayId
                };
                var parameter = await _client.ExecuteAsync(req);

                // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
                ViewData["parameter"] = JsonConvert.SerializeObject(parameter);
                ViewData["response"]  = response.Body;
                return(View());
            }
            ViewData["response"] = response.Body;
            return(View());
        }
示例#24
0
        // APP支付
        public async Task <PayResult> AppPay(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Order_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.APP
            };

            logger.LogDebug($"Wepay AppPay begin with: {request.Id}");
            var res = await client.ExecuteAsync(req, options.Value);

            if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS")
            {
                var appReq = new WeChatPayAppSdkRequest
                {
                    PrepayId = res.PrepayId
                };

                logger.LogDebug($"Wepay AppPay end with: {request.Id} SUCCESS");

                // 将参数(parameter)给 ios/android端 让他调起微信APP
                // https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
                return(new PayResult
                {
                    Success = true,
                    Params = await client.ExecuteAsync(appReq, options.Value)
                });
            }

            logger.LogDebug($"Wepay AppPay end with: {request.Id} Fail: {res.ErrCode}:{res.ErrCodeDes}");
            return(new PayResult
            {
                Success = false,
                Error = $"{res.ErrCode}:{res.ErrCodeDes}"
            });
        }
示例#25
0
        // H5支付
        public async Task <PayWebResult> H5Pay(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var req   = new WeChatPayUnifiedOrderRequest
            {
                OutTradeNo     = order.Order_SN,
                Body           = order.Name,
                TotalFee       = (int)(order.Order_Money * 100),
                SpBillCreateIp = App.Context.GetClientIp(),
                NotifyUrl      = request.NotifyUrl,
                TradeType      = WepayTypes.MWEB
            };

            // mweb_url为拉起微信支付收银台的中间页面
            // 可通过访问该url来拉起微信客户端完成支付
            // res.mweb_url的有效期为5分钟
            logger.LogDebug($"Wepay H5Pay begin with: {request.Id}");
            var res = await client.ExecuteAsync(req, options.Value);

            if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS")
            {
                logger.LogDebug($"Wepay H5Pay end with: {request.Id} SUCCESS");
                return(new PayWebResult
                {
                    Success = true,
                    WebUrl = res.MwebUrl,
                    Params = res.ResponseParameters
                });
            }

            logger.LogDebug($"Wepay H5Pay end with: {request.Id} Fail: {res.ErrCode}:{res.ErrCodeDes}");
            return(new PayWebResult
            {
                Success = false,
                Error = $"{res.ErrCode}:{res.ErrCodeDes}"
            });
        }