ChinaPay 支付接口接入 案例

前一段时间,系统需要接入在线支付。其中就有ChinaPay.

我的商城是asp.net(C#)编写。chinapay 采用了数字签名的方式来验证数据。

 

1:必须的东西

 

上面这些东西都是商务谈定以后,由chinapay分配的。

都是必不可少的。

具体作用可以看看帮助文档。

 

2:注意的东西

提交数据的时候,需要通过私钥加密,然后传给网关。

接受数据的时候,需要通过公钥解密,验证签名。

public static bool check(string MerId, string OrdId, string TransAmt, string CuryId, string TransDate, string TransType, string status, string ChkValue) { NetPay netPay = new NetPay(); Boolean flag = netPay.buildKey("999999999999999", 0, SignData.pubKeyPath); if (flag) { if (netPay.PublicKeyFlag) { flag = netPay.verifyTransResponse(MerId, OrdId, TransAmt, CuryId, TransDate, TransType, status, ChkValue); } else { flag = false; } } else { flag = false; } return flag; }

 

15个“9”是chinapay的商户号,不要轻易修改,否则,无法创建对公钥的引用。

 

3:提交数据具体做法

//处理备注结束 CNong_Model.D8_OrderInfo mod = dal.GetModel(id); double zonger = TotalMoneyById(mod.Id.ToString()); string MerId = "808080012******";//商户号 string OrdId = mod.OrderNum; //订单号 string TransAmt = (zonger*100).ToString();//订单金额 TransAmt = TransAmt.PadLeft(12, '0'); string CuryId = "156";//货币代码 string TransDate = DateTime.Now.ToString("yyyyMMdd"); //订单日期 string TransType = "0001";//交易类型 string Priv1 = mod.OrderNum + "|" + zonger.ToString();//备注 //准备签名的数据 string plain = MerId + OrdId + TransAmt + CuryId + TransDate + TransType + Priv1; string canshu = "OrdId=" + mod.OrderNum + "&TransAmt=" + TransAmt + "&TransDate=" + TransDate+"&Priv1="+Priv1; string ChkValue = null; ChkValue = SignData.sign(MerId, plain); //签名长度256位 if (ChkValue == null || ChkValue.Length != 256) { Response.Redirect("error.aspx"); } Server.Transfer("../pay/chinapay/submitmiddle.aspx?ChkValue=" + ChkValue+"&"+canshu);

4:接受数据

protected void Page_Load(object sender, EventArgs e) { string MerId = Request["MerId"];//商户号 string OrdId = Request["OrderNo"];//订单号 string TransAmt = Request["Amount"];//订单金额 string CuryId = Request["CurrencyCode"];//货币代码 string TransDate = Request["TransDate"];//订单日期 string TransType = Request["TransType"];//交易类型 string Priv1 = Request["Priv1"];//备注 string GateId = Request["GateId"];//网关 string status = Request["status"]; string CheckValue = Request["checkvalue"];//签名数据 bool res = SignData.check(MerId, OrdId, TransAmt, CuryId, TransDate, TransType, status, CheckValue); if (res) { CNong_SQLDAL.D8_PayLog dal = new CNong_SQLDAL.D8_PayLog(); CNong_Model.D8_PayLog mod = new CNong_Model.D8_PayLog(); mod.merchantid = MerId; mod.merorderid = OrdId; mod.param1 = SignData.getJineString(TransAmt); mod.amountsum = SignData.getJineString(TransAmt); mod.currencytype = CuryId; mod.subject = TransType; mod.remark = Priv1; mod.state = status; mod.mac = GateId; mod.addtime = DateTime.Now; mod.methodname = "ChinaPay支付"; mod.bak1 = "2"; dal.Add(mod); if (status.Equals("1001")) { //根据订单号更新订单的支付状态标识 CNong_SQLDAL.D8_OrderInfo.UpdatePayStatus(mod.merorderid, "ChinaPay支付", 1); Response.Write("支付成功!订单号:" + mod.merorderid);//接收数据校验成功 } else { Response.Write("支付失败!订单号:" + mod.merorderid);//接收数据校验成功 } }

 

5:大概就是这个样子。文档官方可下,想了解的话,就多看看帮助文档。

 

你可能感兴趣的:(ASP/,ASP.NET)