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();
        }


    }
}