using System; namespace GxPress.Common.WechatPay { public class NativePay { /** * 生成直接支付url,支付url有效期为2小时,模式二 * @param productId 商品ID * @return 模式二URL */ public string GetPayUrl(string productId, string productInfo, string attach, int total_fee) { //Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing..."); try { WxPayData data = new WxPayData(); data.SetValue("body", productInfo);//商品描述 data.SetValue("attach", attach);//附加数据 data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串 data.SetValue("total_fee", total_fee);//总金额 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间 data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间 data.SetValue("goods_tag", "jjj");//商品标记 data.SetValue("trade_type", "NATIVE");//交易类型 data.SetValue("product_id", productId);//商品ID WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口 string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接 //Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url); return url; } catch (System.Exception ex) { throw new Common.Exceptions.BusinessException(ex.Message); } } /*** * 申请退款完整业务流程逻辑 * @param transaction_id 微信订单号(优先使用) * @param out_trade_no 商户订单号 * @param total_fee 订单总金额 * @param refund_fee 退款金额 * @return 退款结果(xml格式) */ public string Refund(string transaction_id, string out_trade_no, string total_fee, string refund_fee) { // Log.Info("Refund", "Refund is processing..."); WxPayData data = new WxPayData(); if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准 { data.SetValue("transaction_id", transaction_id); } else//微信订单号不存在,才根据商户订单号去退款 { data.SetValue("out_trade_no", out_trade_no); } data.SetValue("total_fee", int.Parse(total_fee));//订单总金额 data.SetValue("refund_fee", int.Parse(refund_fee));//退款金额 data.SetValue("out_refund_no", WxPayApi.GenerateOutTradeNo());//随机生成商户退款单号 data.SetValue("op_user_id", WxPayConfig.GetConfig().GetMchID());//操作员,默认为商户号 WxPayData result = WxPayApi.Refund(data);//提交退款申请给API,接收返回数据 // Log.Info("Refund", "Refund process complete, result : " + result.ToXml()); return result.ToPrintStr(); } } }