⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5pay.cs

📁 如果不使用IIS,请先运行 XSP.exe,待提示已侦听 8080端口后
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Security.Cryptography;
using System.Collections.Specialized;
using System.Configuration;
using System.Text;


namespace DNNLite.DesktopModules.OnlinePay
{
    /// <summary>
    /// 财富通接口
    /// 完成功能如下
    /// 1:支付请求
    /// 2:支付结果处理。
    /// 3:查询订单请求.
    /// 4:查询订单结果处理.
    /// </summary>
    public class Md5Pay
    {

        public Md5Pay()
        {
            Configuration cfg = ConfigurationManager.OpenExeConfiguration(
                HttpContext.Current.Server.MapPath("~/web.config"));

            key  =
                cfg.AppSettings.Settings["md5paykey"].Value;
            bargainor_id  =
                cfg.AppSettings.Settings["md5paymid"].Value;
            return_url  =
                cfg.AppSettings.Settings["md5payrecvurl"].Value;
        }

        /// <summary>
        /// 商户号(替换为自已的商户号)
        /// </summary>
        private string bargainor_id = "";
        public string Bargainor_id
        {
            get { return bargainor_id; }
            set { bargainor_id = value; }
        }

        /// <summary>
        /// 商户KEY(替换为自已的KEY)
        /// </summary>
        private string key = "";
        public string Key
        {
            get { return key; }
            set { key = value; }
        }

        /// <summary>
        /// 财付通支付网关URL
        /// </summary>
        private string paygateurl = "https://www.tenpay.com/cgi-bin/v1.0/pay_gate.cgi";
        public string Paygateurl
        {
            get { return paygateurl; }
            set { paygateurl = value; }
        }

        /// <summary>
        /// 财付通查询请求URL
        /// </summary>
        private string querygateurl = "http://portal.tenpay.com/cfbiportal/cgi-bin/cfbiqueryorder.cgi";
        public string Querygateurl
        {
            get { return querygateurl; }
            set { querygateurl = value; }
        }

        /// <summary>
        /// 支付结果回跳页面
        /// 推荐使用ip地址的方式(最长255个字符)
        /// 可以使用相对地址或配置,在使用前拼装全地址就行.这样方便部署.
        /// </summary>
        private string return_url = "";
        public string Return_url
        {
            get { return return_url; }
            set { return_url = value; }
        }

        /// <summary>
        /// 查询结果回跳页面
        /// 推荐使用ip地址的方式(最长255个字符)
        /// 可以使用相对地址或配置,在使用前拼装全地址就行.这样方便部署.
        /// </summary>
        private string queryreturn_url = "http://davidzhu-pc/tenpaymd5/queryresult.aspx";
        public string Queryreturn_url
        {
            get { return queryreturn_url; }
            set { queryreturn_url = value; }
        }

        /// <summary>
        /// 支付命令.1
        /// </summary>
        private const int cmdno = 1;

        /// <summary>
        /// 查询命令.2
        /// </summary>
        private const int querycmdno = 2;

        /// <summary>
        /// 费用类型,现在暂只支持 1:人民币
        /// </summary>
        private int fee_type = 1;

        private string date;

        #region 日期字段设置,格式为yyyyMMdd

        /// <summary>
        /// 支付日期,yyyyMMdd
        /// </summary>
        public string Date
        {
            get
            {
                if (date == null)
                {
                    date = DateTime.Now.ToString("yyyyMMdd");
                }

                return date;
            }
            set
            {
                if (value == null || value.Trim().Length != 8)
                {
                    date = DateTime.Now.ToString("yyyyMMdd");
                }
                else
                {
                    try
                    {
                        string strTmp = value.Trim();
                        date = DateTime.Parse(strTmp.Substring(0, 4) + "-" + strTmp.Substring(4, 2) + "-"
                            + strTmp.Substring(6, 2)).ToString("yyyyMMdd");
                    }
                    catch
                    {
                        date = DateTime.Now.ToString("yyyyMMdd");
                    }

                }
            }
        }

        #endregion

        private string sp_billno = "";
        /// <summary>
        /// 商户订单号,10位正整数
        /// </summary>
        public string Sp_billno
        {
            get { return sp_billno; }
            set { sp_billno = value; }
        }

        private long total_fee = 0;

        /// <summary>
        /// 订单金额,以分为单位
        /// </summary>
        public long Total_fee
        {
            get { return total_fee; }
            set { total_fee = value; }
        }


        /// <summary>
        /// 取时间戳生成随即数,替换交易单号中的后10位流水号
        /// 财付通的交易单号中不允许出现非数字的字符
        /// </summary>
        /// <returns></returns>
        public UInt32 UnixStamp()
        {
            TimeSpan ts = DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            return Convert.ToUInt32(ts.TotalSeconds);
        }

        private string transaction_id = "";
        /// <summary>
        /// 交易单号,商户号(10)+支付日期(8)+商户订单号(10,不足的话左补0)=28位.
        /// </summary>
        public string Transaction_id
        {
            get
            {
                return transaction_id;
            }
            set
            {
                transaction_id = value;
            }
        }

        private string desc = "";
        /// <summary>
        /// 商品名称
        /// </summary>
        public string Desc
        {
            get { return UrlDecode(desc); }
            set { desc = UrlEncode(value); }
        }

        private string attach = "";
        /// <summary>
        /// 指令标识,每次指令都会有这个字段,财付通在处理完成后会原样返回.
        /// </summary>
        public string Attach
        {
            get { return UrlDecode(attach); }
            set { attach = UrlEncode(value); }
        }

        private string purchaser_id = "";
        /// <summary>
        /// 买家财付通帐号
        /// </summary>
        public string Purchaser_id
        {
            get { return purchaser_id; }
            set { purchaser_id = value; }
        }

        private string spbill_create_ip = "";
        /// <summary>
        /// 用户ip
        /// </summary>
        public string Spbill_create_ip
        {
            get { return spbill_create_ip; }
            set { spbill_create_ip = value; }
        }

        private int pay_result;
        /// <summary>
        ///  支付結果
        /// </summary>
        public const int PAYOK = 0;
        public const int PAYSPERROR = 1;
        public const int PAYMD5ERROR = 2;
        public const int PAYERROR = 3;
        /// <summary>
        /// 支付结果 
        /// 0:支付成功.
        /// 1:商户号错.
        /// 2:签名错误.
        /// 3:支付失败.
        /// </summary>
        public int Pay_Result
        {
            get { return pay_result; }
        }


        /// <summary>
        /// 支付结果说明字段
        /// </summary>
        public string PayResultStr
        {
            get
            {
                switch (pay_result)
                {
                    case PAYOK:
                        return "支付成功";
                    case PAYSPERROR:
                        return "商户号错";
                    case PAYMD5ERROR:
                        return "签名错误";
                    case PAYERROR:
                        return "支付失败";
                    default:
                        return "未知类型(" + pay_result + ")";
                }
            }
        }

        private string payerrmsg = "";

        /// <summary>
        /// 如果为支付失败时,财付通返回的错误信息
        /// </summary>
        public string PayErrMsg
        {
            get { return payerrmsg; }
        }

        /// <summary>
        /// 对字符串进行URL编码
        /// </summary>
        /// <param name="instr">待编码的字符串</param>
        /// <returns>编码结果</returns>
        private static string UrlEncode(string instr)
        {
            if (instr == null || instr.Trim() == "")
                return "";
            else
            {
                return instr.Replace("%", "%25").Replace("=", "%3d").Replace("&", "%26").
                    Replace("\"", "%22").Replace("?", "%3f").Replace("'", "%27").Replace(" ", "%20");
            }
        }

        /// <summary>
        /// 对字符串进行URL解码
        /// </summary>
        /// <param name="instr">待解码的字符串</param>
        /// <returns>解码结果</returns>
        private static string UrlDecode(string instr)
        {
            if (instr == null || instr.Trim() == "")
                return "";
            else
            {
                return instr.Replace("%3d", "=").Replace("%26", "&").Replace("%22", "\"").Replace("%3f", "?")
                    .Replace("%27", "'").Replace("%20", " ").Replace("%25", "%");
            }
        }

        /// <summary>
        /// 获取大写的MD5签名结果
        /// </summary>
        /// <param name="encypStr"></param>
        /// <returns></returns>
        private static string GetMD5(string encypStr)
        {
            string retStr;
            MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();

            //创建md5对象
            byte[] inputBye;
            byte[] outputBye;

            //使用GB2312编码方式把字符串转化为字节数组.
            inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);

            outputBye = m5.ComputeHash(inputBye);

            retStr = System.BitConverter.ToString(outputBye);
            retStr = retStr.Replace("-", "").ToUpper();
            return retStr;
        }

        


        /// <summary>
        /// 获取支付签名
        /// </summary>
        /// <returns>根据参数得到签名</returns>
        private string GetPaySign()
        {
            string sign_text = "cmdno=" + cmdno + "&date=" + Date + "&bargainor_id=" + bargainor_id

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -