Pay.cs
Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Security.Cryptography;
using System.Configuration; namespace Help
{
public class Pay
{
#region 财付通接口
/// <summary>
/// 财付通接口
/// </summary>
/// <param name="proName">商品名</param>
/// <param name="orderID">订单号</param>
/// <param name="total">货品总价格</param>
/// <param name="Seller">卖家财付通号</param>
/// <param name="TransportType">物流方式</param>
/// <param name="TransportPrice">物流费用</param>
/// <returns></returns>
public static string getTenpayUrl(string proName,string orderID,string total,string Seller,string TransportType,string TransportPrice)
{
//接收传给财付通网关的商户订单的参数
Md5Pay md5pay = new Md5Pay();
md5pay.Encode_type = 1;
md5pay.Seller = Seller;
proName = proName.Replace("<", "").Replace(">", "").Replace("%", "").Replace("&", "").Replace("\"", "").Replace("'", "").Replace("=", "").Replace("?", "")
.Replace("+","").Replace("#","");
md5pay.Mch_name = bSubstring(proName, 32);
md5pay.Mch_price = int.Parse(Math.Round(decimal.Parse(total) * 100).ToString());
md5pay.Transport_desc = TransportType;
md5pay.Transport_fee = int.Parse(Math.Round(decimal.Parse(TransportPrice) * 100).ToString());
md5pay.Mch_desc = proName;
md5pay.Mch_type = 1;
md5pay.Mch_vno = orderID;
md5pay.Attach = "thesamereturn";
if (!md5pay.GetPayUrl(out url))
{
return HttpContext.Current.Request.FilePath;
}
return url;
}
/// 根据字节数截取字符串
/// </summary>
/// <param name="s">字符串</param>
/// <param name="length">要截取的字节数</param>
/// <returns></returns>
private static string bSubstring(string s, int length)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(s);
if (bytes.Length <= length)
return s;
int n = 0; // 表示当前的字节数
int i = 0; // 要截取的字节数
for (; i < bytes.GetLength(0) && n < length; i++)
{
// 偶数位置,如0、2、4等,为UCS2编码中两个字节的第一个字节
if (i % 2 == 0)
{
n++; // 在UCS2第一个字节时n加1
}
else
{
// 当UCS2编码的第二个字节大于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] > 0)
{
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (n % 2 == 1)
{
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i] > 0)
i = i - 1;
// 该UCS2字符是字母或数字,则保留该字符
else
i = i + 1;
}
return System.Text.Encoding.Unicode.GetString(bytes, 0, i);
}
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Security.Cryptography;
using System.Configuration; namespace Help
{
public class Pay
{
#region 财付通接口
/// <summary>
/// 财付通接口
/// </summary>
/// <param name="proName">商品名</param>
/// <param name="orderID">订单号</param>
/// <param name="total">货品总价格</param>
/// <param name="Seller">卖家财付通号</param>
/// <param name="TransportType">物流方式</param>
/// <param name="TransportPrice">物流费用</param>
/// <returns></returns>
public static string getTenpayUrl(string proName,string orderID,string total,string Seller,string TransportType,string TransportPrice)
{
//接收传给财付通网关的商户订单的参数
Md5Pay md5pay = new Md5Pay();
//utf-8编码
md5pay.Encode_type = 1;
//卖家商户号
md5pay.Seller = Seller;
//商品名称
proName = proName.Replace("<", "").Replace(">", "").Replace("%", "").Replace("&", "").Replace("\"", "").Replace("'", "").Replace("=", "").Replace("?", "")
.Replace("+","").Replace("#","");
md5pay.Mch_name = bSubstring(proName, 32);
//商品价格(分为单位)
md5pay.Mch_price = int.Parse(Math.Round(decimal.Parse(total) * 100).ToString());
//物流方式
md5pay.Transport_desc = TransportType;
//物流费用
md5pay.Transport_fee = int.Parse(Math.Round(decimal.Parse(TransportPrice) * 100).ToString());
//交易描述
md5pay.Mch_desc = proName;
//交易类型:1、实物交易,2、虚拟交易。
md5pay.Mch_type = 1;
//网站内部交易订单号
md5pay.Mch_vno = orderID;
//该参数财付通不做处理。回调时原样返回。为商户可能的个性化应用预留。
md5pay.Attach = "thesamereturn";
string url = "";
if (!md5pay.GetPayUrl(out url))
{
return HttpContext.Current.Request.FilePath;
}
return url;
}
/// <summary>
/// 根据字节数截取字符串
/// </summary>
/// <param name="s">字符串</param>
/// <param name="length">要截取的字节数</param>
/// <returns></returns>
private static string bSubstring(string s, int length)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(s);
if (bytes.Length <= length)
return s;
int n = 0; // 表示当前的字节数
int i = 0; // 要截取的字节数
for (; i < bytes.GetLength(0) && n < length; i++)
{
// 偶数位置,如0、2、4等,为UCS2编码中两个字节的第一个字节
if (i % 2 == 0)
{
n++; // 在UCS2第一个字节时n加1
}
else
{
// 当UCS2编码的第二个字节大于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] > 0)
{
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (n % 2 == 1)
{
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i] > 0)
i = i - 1;
// 该UCS2字符是字母或数字,则保留该字符
else
i = i + 1;
}
return System.Text.Encoding.Unicode.GetString(bytes, 0, i);
}
#endregion
}
}
Md5pay.cs (转载自财付通接口实例)
Code
using System;
using System.Text;
using System.Security.Cryptography;
using System.Collections.Specialized;
using System.Configuration;
using System.Web.UI;
using System.Web; namespace Help
{
/// <summary>
/// 完成功能如下
/// 1:支付请求
/// 2:支付结果处理。
/// 3:查询订单请求.
/// 4:查询订单结果处理.
/// </summary>
public class Md5Pay
{
/// 参数附值,很多参数附值后并不能传给财付通前台验证
/// 这里只是给予一个参照.
/// </summary>
private string chnid = ConfigurationSettings.AppSettings["bargainor_id"];
//平台提供者的财付通账号
public string Chnid
{
get { return chnid; }
set { chnid = value; }
}
//任务代码,暂定值:12
public int Cmdno
{
get { return cmdno; }
set { cmdno = value; }
}
//1:GB2312编码,默认为GB2312编码。2:UTF-8编码。
public int Encode_type
{
get { return encode_type; }
set { encode_type = value; }
}
//交易说明,不能包含<>’”%特殊字符
public string Mch_desc
{
get { return mch_desc; }
set { mch_desc = value; }
}
//商品名称,不能包含<>’”%特殊字符
public string Mch_name
{
get { return mch_name; }
set { mch_name = value; }
}
//商品总价,单位为分。而财付通界面不再允许选择数量
public int Mch_price
{
get { return mch_price; }
set { mch_price = value; }
}
//交易类型:1、实物交易,2、虚拟交易
public int Mch_type
{
get { return mch_type; }
set { mch_type = value; }
}
//是否需要在财付通填定物流信息,1:需要,2:不需要。
public int Need_buyerinfo
{
get { return need_buyerinfo; }
set { need_buyerinfo = value; }
}
//签名
public string Sign
{
get { return sign; }
set { sign = value; }
}
//收款方财付通账号
public string Seller
{
get { return seller; }
set { seller = value; }
}
//物流公司或物流方式说明
public string Transport_desc
{
get { return transport_desc; }
set { transport_desc = value; }
}
//版本号
public string Version
{
get { return version; }
set { version = value; }
}
//订单总价,单位为分
public int Total_fee
{
get { return total_fee; }
set { total_fee = value; }
}
//商品总价格
public int Trade_price
{
get { return trade_price; }
set { trade_price = value; }
}
//物流价格
public int Transport_fee
{
get { return transport_fee; }
set { transport_fee = value; }
}
private string mch_vno = "1122334455";
///商家定单号,此参数仅在对账时提供。YYYYMMDDXXXX
public string Mch_vno
{
get { return mch_vno; }
set { mch_vno = value; }
}
///0,交易成功,其它值,标识交易失败的状态。
public int Retcode
{
get { return retcode; }
set { retcode = value; }
}
///交易状态:1交易创建 2收获地址填写完毕 3买家付款成功 4卖家发货成功
public string Status
{
get { return status; }
set { status = value; }
}
///买家财付通帐号
public string Buyer_id
{
get { return buyer_id; }
set { buyer_id = value; }
}
///财付通交易单号
public string Cft_tid
{
get { return cft_tid; }
set { cft_tid = value; }
}
/// 商户KEY(替换为自已的KEY)
public string Key
{
get { return key; }
set { key = value; }
}
private string paygateurl = ConfigurationSettings.AppSettings["paygateurl"];/// 财付通支付网关URL
private string querygateurl = ConfigurationSettings.AppSettings["querygateurl"];/// 财付通查询请求URL
/// 支付结果回跳页面
/// 推荐使用ip地址的方式(最长255个字符)
/// 可以使用相对地址或配置,在使用前拼装全地址就行.这样方便部署.
/// </summary>
private string mch_returl = ConfigurationSettings.AppSettings["mch_returl"];
/// 查询结果回跳页面
/// 推荐使用ip地址的方式(最长255个字符)
/// 可以使用相对地址或配置,在使用前拼装全地址就行.这样方便部署.
/// </summary>
private string show_url = ConfigurationSettings.AppSettings["show_url"];
private string date;//日期
#region 日期字段设置,格式为yyyyMMdd
/// 支付日期,yyyyMMdd
/// </summary>
public string Date
{
get
{
if (date == null)
{
date = DateTime.Now.ToString("yyyyMMdd");
}
}
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");
}
/// <summary>
/// 指令标识,每次指令都会有这个字段,财付通在处理完成后会原样返回.
/// </summary>
public string Attach
{
get { return UrlDecode(attach); }
set { attach = UrlEncode(value); }
}
/// <summary>
/// 如果为支付失败时,财付通返回的错误信息
/// </summary>
public string PayErrMsg
{
get { return payerrmsg; }
}
/// 对字符串进行URL编码
using System;
using System.Text;
using System.Security.Cryptography;
using System.Collections.Specialized;
using System.Configuration;
using System.Web.UI;
using System.Web; namespace Help
{
/// <summary>
/// 完成功能如下
/// 1:支付请求
/// 2:支付结果处理。
/// 3:查询订单请求.
/// 4:查询订单结果处理.
/// </summary>
public class Md5Pay
{
/// <summary>
/// 参数附值,很多参数附值后并不能传给财付通前台验证
/// 这里只是给予一个参照.
/// </summary>
private string chnid = ConfigurationSettings.AppSettings["bargainor_id"];
//平台提供者的财付通账号
public string Chnid
{
get { return chnid; }
set { chnid = value; }
}
private int cmdno = 12;
//任务代码,暂定值:12
public int Cmdno
{
get { return cmdno; }
set { cmdno = value; }
}
private int encode_type = 1;
//1:GB2312编码,默认为GB2312编码。2:UTF-8编码。
public int Encode_type
{
get { return encode_type; }
set { encode_type = value; }
}
private string mch_desc = "测试交易描述";
//交易说明,不能包含<>’”%特殊字符
public string Mch_desc
{
get { return mch_desc; }
set { mch_desc = value; }
}
private string mch_name = "";
//商品名称,不能包含<>’”%特殊字符
public string Mch_name
{
get { return mch_name; }
set { mch_name = value; }
}
private int mch_price = 1;
//商品总价,单位为分。而财付通界面不再允许选择数量
public int Mch_price
{
get { return mch_price; }
set { mch_price = value; }
}
private int mch_type = 1;
//交易类型:1、实物交易,2、虚拟交易
public int Mch_type
{
get { return mch_type; }
set { mch_type = value; }
}
private int need_buyerinfo = 2;
//是否需要在财付通填定物流信息,1:需要,2:不需要。
public int Need_buyerinfo
{
get { return need_buyerinfo; }
set { need_buyerinfo = value; }
}
private string sign = "";
//签名
public string Sign
{
get { return sign; }
set { sign = value; }
}
private string seller = "88881491";
//收款方财付通账号
public string Seller
{
get { return seller; }
set { seller = value; }
}
private string transport_desc = "测试物流信息";
//物流公司或物流方式说明
public string Transport_desc
{
get { return transport_desc; }
set { transport_desc = value; }
}
private string version = "2";
//版本号
public string Version
{
get { return version; }
set { version = value; }
}
private int total_fee = 1;
//订单总价,单位为分
public int Total_fee
{
get { return total_fee; }
set { total_fee = value; }
}
private int trade_price = 1;
//商品总价格
public int Trade_price
{
get { return trade_price; }
set { trade_price = value; }
}
private int transport_fee = 0;
//物流价格
public int Transport_fee
{
get { return transport_fee; }
set { transport_fee = value; }
}
//商户定单号,只能为数字
private string mch_vno = "1122334455";
///商家定单号,此参数仅在对账时提供。YYYYMMDDXXXX
public string Mch_vno
{
get { return mch_vno; }
set { mch_vno = value; }
}
private int retcode = 0;
///0,交易成功,其它值,标识交易失败的状态。
public int Retcode
{
get { return retcode; }
set { retcode = value; }
}
private string status = "3";
///交易状态:1交易创建 2收获地址填写完毕 3买家付款成功 4卖家发货成功
public string Status
{
get { return status; }
set { status = value; }
}
private string buyer_id = "40669760";
///买家财付通帐号
public string Buyer_id
{
get { return buyer_id; }
set { buyer_id = value; }
}
private string cft_tid = "";
///财付通交易单号
public string Cft_tid
{
get { return cft_tid; }
set { cft_tid = value; }
}
private string key = ConfigurationSettings.AppSettings["key_id"];
/// 商户KEY(替换为自已的KEY)
public string Key
{
get { return key; }
set { key = value; }
}
private string paygateurl = ConfigurationSettings.AppSettings["paygateurl"];/// 财付通支付网关URL
private string querygateurl = ConfigurationSettings.AppSettings["querygateurl"];/// 财付通查询请求URL
/// <summary>
/// 支付结果回跳页面
/// 推荐使用ip地址的方式(最长255个字符)
/// 可以使用相对地址或配置,在使用前拼装全地址就行.这样方便部署.
/// </summary>
private string mch_returl = ConfigurationSettings.AppSettings["mch_returl"];
/// <summary>
/// 查询结果回跳页面
/// 推荐使用ip地址的方式(最长255个字符)
/// 可以使用相对地址或配置,在使用前拼装全地址就行.这样方便部署.
/// </summary>
private string show_url = ConfigurationSettings.AppSettings["show_url"];
private const int querycmdno = 2;/// 查询命令.2
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 attach = "test11";
/// <summary>
/// 指令标识,每次指令都会有这个字段,财付通在处理完成后会原样返回.
/// </summary>
public string Attach
{
get { return UrlDecode(attach); }
set { attach = UrlEncode(value); }
}
private string payerrmsg = "";
/// <summary>
/// 如果为支付失败时,财付通返回的错误信息
/// </summary>
public string PayErrMsg
{
get { return payerrmsg; }
}
/// <summary>
/// 对字符串进行URL编码
作者: furnish
- 该日志由 furnish 于12年前发表在综合分类下,最后更新于 2012年09月09日.
- 转载请注明: ASP.NET财付通支付接口源码 | 学步园 +复制链接
抱歉!评论已关闭.