Files
g.hnyhua.cn/Mtxfw.shop/pay/kqpay.aspx.cs

176 lines
9.5 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;
using System.Text;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Mtxfw.shop
{
public partial class kqpay : System.Web.UI.Page
{
#region
//人民币网关账号该账号为11位人民币网关商户账号+01,该参数必填。
public string merchantAcctId = "1002221632301";
//编码方式1代表 UTF-8; 2 代表 GBK; 3代表 GB2312 默认为1,该参数必填。
public string inputCharset = "3";
//接收支付结果的页面地址,该参数一般置为空即可。
public string pageUrl = "";
//服务器接收支付结果的后台地址,该参数务必填写,不能为空。
public string bgUrl = "http://www.hzmfgw.com/pay/kq_receive.aspx";
//网关版本固定值v2.0,该参数必填。
public string version = "v2.0";
//语言种类1代表中文显示2代表英文显示。默认为1,该参数必填。
public string language = "1";
//签名类型,该值为4代表PKI加密方式,该参数必填。
public string signType = "4";
//支付人姓名,可以为空。
public string payerName = "";
//支付人联系类型1 代表电子邮件方式2 代表手机联系方式。可以为空。
public string payerContactType = "";
//支付人联系方式与payerContactType设置对应payerContactType为1则填写邮箱地址payerContactType为2则填写手机号码。可以为空。
public string payerContact = "";
//商户订单号,以下采用时间来定义订单号,商户可以根据自己订单号的定义规则来定义该值,不能为空。
public string orderId = DateTime.Now.ToString("yyyyMMddHHmmss");
//订单金额金额以“分”为单位商户测试以1分测试即可切勿以大金额测试。该参数必填。
public string orderAmount = "1";
//订单提交时间格式yyyyMMddHHmmss20071117020101不能为空。
public string orderTime = DateTime.Now.ToString("yyyyMMddHHmmss");
//商品名称,可以为空。
public string productName = "付款";
//商品数量,可以为空。
public string productNum = "1";
//商品代码,可以为空。
public string productId = "55558888";
//商品描述,可以为空。
public string productDesc = "";
//扩展字段1商户可以传递自己需要的参数支付完快钱会原值返回可以为空。
public string ext1 = "";
//扩展自段2商户可以传递自己需要的参数支付完快钱会原值返回可以为空。
public string ext2 = "";
//支付方式一般为00代表所有的支付方式。如果是银行直连商户该值为10必填。
public string payType = "00";
//银行代码如果payType为00该值可以为空如果payType为10该值必须填写具体请参考银行列表。
public string bankId = "";
//同一订单禁止重复提交标志实物购物车填1虚拟产品用0。1代表只能提交一次0代表在支付不成功情况下可以再提交。可为空。
public string redoFlag = "";
//快钱合作伙伴的帐户号,即商户账号,可为空。
public string pid = "";
// signMsg 签名字符串 不可空,生成加密签名串
public string signMsg = "";
#endregion
Mtxfw.Utility.Config config = new Mtxfw.Utility.Config();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
////////////////////////////////////////////请求参数////////////////////////////////////////////
Double Addmoney = Convert.ToDouble(config.webMoney1) * 100;
orderAmount = (Convert.ToDouble(config.webMoney1)*100).ToString();
//商户订单号
orderId = DateTime.Now.ToString("yyyyMMddHHmmss");
Model.user_Results_jl2 mjl2 = new Model.user_Results_jl2();
mjl2.MemberId = 0;
mjl2.MemberId2 = 0;
mjl2.Addmoney = Addmoney;
mjl2.Cutmoney =0;
mjl2.Totalmoney = Addmoney;
mjl2.addtime = DateTime.Now;
mjl2.BZContent = "付款测试通道";
mjl2.PayID = orderId;
mjl2.OrdersIDs = "";
mjl2.OrdersID = 0;
mjl2.utype = 2;
mjl2.utype2 = 1;
mjl2.Seef = 0;
mjl2.seeftime = DateTime.Now;
new DAL.user_Results_jl2().Add(mjl2);
//订单名称
///productDesc = (t == "1" ? "购买商品付款" : "账户充值");
if (Request.QueryString["pay_bank"] != null)
{
if (Request.QueryString["pay_bank"].Trim() != "")
{
payType = Request.QueryString["pay_bank"];
}
}
//拼接字符串
string signMsgVal = "";
signMsgVal = appendParam(signMsgVal, "inputCharset", inputCharset);
signMsgVal = appendParam(signMsgVal, "pageUrl", pageUrl);
signMsgVal = appendParam(signMsgVal, "bgUrl", bgUrl);
signMsgVal = appendParam(signMsgVal, "version", version);
signMsgVal = appendParam(signMsgVal, "language", language);
signMsgVal = appendParam(signMsgVal, "signType", signType);
signMsgVal = appendParam(signMsgVal, "merchantAcctId", merchantAcctId);
signMsgVal = appendParam(signMsgVal, "payerName", payerName);
signMsgVal = appendParam(signMsgVal, "payerContactType", payerContactType);
signMsgVal = appendParam(signMsgVal, "payerContact", payerContact);
signMsgVal = appendParam(signMsgVal, "orderId", orderId);
signMsgVal = appendParam(signMsgVal, "orderAmount", orderAmount);
signMsgVal = appendParam(signMsgVal, "orderTime", orderTime);
signMsgVal = appendParam(signMsgVal, "productName", productName);
signMsgVal = appendParam(signMsgVal, "productNum", productNum);
signMsgVal = appendParam(signMsgVal, "productId", productId);
signMsgVal = appendParam(signMsgVal, "productDesc", productDesc);
signMsgVal = appendParam(signMsgVal, "ext1", ext1);
signMsgVal = appendParam(signMsgVal, "ext2", ext2);
signMsgVal = appendParam(signMsgVal, "payType", payType);
signMsgVal = appendParam(signMsgVal, "redoFlag", redoFlag);
signMsgVal = appendParam(signMsgVal, "pid", pid);
///PKI加密
///编码方式UTF-8 GB2312 用户可以根据自己系统的编码选择对应的加密方式
byte[] bytes = System.Text.Encoding.GetEncoding("GB2312").GetBytes(signMsgVal);
//byte[] bytes = System.Text.Encoding.UTF8.GetBytes(signMsgVal);
X509Certificate2 cert = new X509Certificate2(HttpContext.Current.Server.MapPath("/App_Data/99bill-rsa.pfx"), "123456", X509KeyStorageFlags.MachineKeySet);
RSACryptoServiceProvider rsapri = (RSACryptoServiceProvider)cert.PrivateKey;
RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsapri);
byte[] result;
f.SetHashAlgorithm("SHA1");
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
result = sha.ComputeHash(bytes);
signMsg = System.Convert.ToBase64String(f.CreateSignature(result)).ToString();
label_msg.Text = "<script> $(document).ready(function () {document.forms['kqPay'].submit();});</script>";
}
catch (Exception err)
{
Mtxfw.Utility.Common.WriteHtml("/weixin/weixin1.txt", err.ToString());
}
}
}
//功能函数。将变量值不为空的参数组成字符串
#region
public string appendParam(string returnStr, string paramId, string paramValue)
{
if (returnStr != "")
{
if (paramValue != "")
{
returnStr += "&" + paramId + "=" + paramValue;
}
}
else
{
if (paramValue != "")
{
returnStr = paramId + "=" + paramValue;
}
}
return returnStr;
}
#endregion
}
}