通过网银在线进行在线支付[通俗易懂]

2022-09-07 10:56:30 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

总结一下 在我们一个项目中使用的通过网银在线进行在线支付的步骤:

下面我用一个asp.net 的例子做一下说明:

一共建立2个页面 Send.aspx (发送交易数据给网银在线) 和 Receive.aspx (接收网银在线的交易结果)

一. 建立页面 Send.aspx (作用是收集支付的数据 并将信息通过页面Post的方式传递给网银在线)

1. 网页代码

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Send.aspx.cs” Inherits=”Send” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>

<html xmlns=”http://www.w3.org/1999/xhtml” > <head runat=”server”> <title>订单提交</title> </head> <body > <body onLoad=”javascript:document.E_FORM.submit()” > <form action=”https://pay3.chinabank.com.cn/PayGate” method=”post” name=”E_FORM”> <input type=”hidden” name=”v_md5info” value=”<%=v_md5info%>” size=”100″ /> <input type=”hidden” name=”v_mid” value=”<%=v_mid%>” /> <input type=”hidden” name=”v_oid” value=”<%=v_oid%>” /> <input type=”hidden” name=”v_amount” value=”<%=v_amount%>” /> <input type=”hidden” name=”v_moneytype” value=”<%=v_moneytype%>” /> <input type=”hidden” name=”v_url” value=”<%=v_url%>” />

<!–以下几项项为网上支付完成后,随支付反馈信息一同传给信息接收页–> <input type=”hidden” name=”remark1″ value=”<%=remark1%>” /> <input type=”hidden” name=”remark2″ value=”<%=remark2%>” /> <!–以下几项只是用来记录客户信息,可以不用,不影响支付 –>

<input type=”hidden” name=”v_rcvname” value=”<%=v_rcvname%>” /> <input type=”hidden” name=”v_rcvaddr” value=”<%=v_rcvaddr%>” /> <input type=”hidden” name=”v_rcvtel” value=”<%=v_rcvtel%>” /> <input type=”hidden” name=”v_rcvpost” value=”<%=v_rcvpost%>” /> <input type=”hidden” name=”v_rcvemail” value=”<%=v_rcvemail%>” /> <input type=”hidden” name=”v_rcvmobile” value=”<%=v_rcvmobile%>” />

<input type=”hidden” name=”v_ordername” value=”<%=v_ordername%>” /> <input type=”hidden” name=”v_orderaddr” value=”<%=v_orderaddr%>” /> <input type=”hidden” name=”v_ordertel” value=”<%=v_ordertel%>” /> <input type=”hidden” name=”v_orderpost” value=”<%=v_orderpost%>” /> <input type=”hidden” name=”v_orderemail” value=”<%=v_orderemail%>” /> <input type=”hidden” name=”v_ordermobile” value=”<%=v_ordermobile%>” /> </form> </body> </html>

注解:《1》 onLoad=”javascript:document.E_FORM.submit()” 这句话的意思是 页面加载完成(变量已经赋值) 立刻提交 《2》 <form action=”https://pay3.chinabank.com.cn/PayGate” method=”post” name=”E_FORM”> 这句话的意思是 提交到网银在线的接口网页(Post方式) 《3》protected string v_url; // 返回页地址 这个变量的意思: 您可以 指定对 在线支付 结果 的接收页面 (例如:支付成功) 网银在线会将反馈结果通过网页Post的方式传给您的网页

2. 后台代码

using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using HGZP.ERP.BusinessLogic; using HGZP.ERP.PublicUnit;

public partial class Send : System.Web.UI.Page { //必要的交易信息 protected string v_amount; // 订单金额 protected string v_moneytype; // 币种 protected string v_md5info; // 对拼凑串MD5私钥加密后的值 protected string v_mid; // 商户号 protected string v_url; // 返回页地址 protected string v_oid; // 推荐订单号构成格式为 年月日-商户号-小时分钟秒

//收货信息 protected string v_rcvname; // 收货人 protected string v_rcvaddr; // 收货地址 protected string v_rcvtel; // 收货人电话 protected string v_rcvpost; // 收货人邮编 protected string v_rcvemail; // 收货人邮件 protected string v_rcvmobile; // 收货人手机号

//订货人信息 protected string v_ordername; // 订货人姓名 protected string v_orderaddr; // 订货人地址 protected string v_ordertel; // 订货人电话 protected string v_orderpost; // 订货人邮编 protected string v_orderemail; // 订货人邮件 protected string v_ordermobile; // 订货人手机号 protected string pmode_id; //两个备注 protected string remark1; protected string remark2;

protected void Page_Load(object sender, EventArgs e) {

//商户号,这里为测试商户号1001,替换为自己的商户号即可 v_mid = GlobalFunctionDataBaseMutuality.GetItemParameter(GlobalFunctionDataBaseMutuality.ProgramParameter.OnLinemid); if (v_mid.Trim() == “Error”) { Response.Write(“<script language=javascript>window.open(‘ErrorMessage.aspx’);</script>”); return; } //v_mid = “21669597”; //商户自定义返回接收支付结果的页面 v_url = GlobalFunctionDataBaseMutuality.GetItemParameter(GlobalFunctionDataBaseMutuality.ProgramParameter.OnLineurl); if (v_url.Trim() == “Error”) { Response.Write(“<script language=javascript>window.open(‘ErrorMessage.aspx’);</script>”); return; } //v_url = “http://192.168.200.42/ebank/chinabank/Receive.aspx“; //MD5密钥要跟订单提交页相同,如Send.asp里的 key = “test” ,修改””号内 test 为您的密钥 //如果您还没有设置MD5密钥请登陆我们为您提供商户后台,地址:https://merchant3.chinabank.com.cn/ //登陆后在上面的导航栏里可能找到“B2C”,在二级导航栏里有“MD5密钥设置” //建议您设置一个16位以上的密钥或更高,密钥最多64位,但设置16位已经足够了 string key = GlobalFunctionDataBaseMutuality.GetItemParameter(GlobalFunctionDataBaseMutuality.ProgramParameter.OnLinekey); if (key.Trim() == “Error”) { Response.Write(“<script language=javascript>window.open(‘ErrorMessage.aspx’);</script>”); return; } //string key = “1H6G0Z0P83D70A1E8AF60F49C143A7B95”;

v_oid = Context.Items[“v_oid”].ToString();//定单号

//if (v_oid == null || v_oid.Equals(“”)) //{ // DateTime dt = DateTime.Now; // string v_ymd = dt.ToString(“yyyyMMdd”); // yyyyMMdd // string timeStr = dt.ToString(“HHmmss”); // HHmmss // v_oid = v_ymd v_mid timeStr; //}

v_amount = Context.Items[“v_amount”].ToString();//支付金额 v_moneytype = “CNY”;//支付类型 string text = v_amount v_moneytype v_oid v_mid v_url key; // 拼凑加密串 v_md5info = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(text, “md5”).ToUpper(); remark1 = Context.Items[“customId”].ToString(); ;

} }

注解: 代码里面主要作用是给变量赋值 有一些我们项目的逻辑 我没有删除 您在使用的时候 参照赋值 即可

二. 建立页面 Receive.aspx

1. 页面

<%@ Page Language=”C#” MasterPageFile=”~/MasterPage.master” AutoEventWireup=”true” CodeFile=”Receive.aspx.cs” Inherits=”Receive” Title=”Untitled Page” %>

<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”> <div style=”text-align: center”> <asp:Literal ID=”Literal1″ runat=”server”></asp:Literal> </div> </asp:Content>

注解:占位符Literal1 的作用是 显示后台代码的结果

2. 后台代码

using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text;

using HGZP.ERP.PublicUnit; using HGZP.ERP.BusinessLogic; using HGZP.ERP.DataAccess; using System.IO;

public partial class Receive : System.Web.UI.Page { protected string v_oid; // 订单号 protected string v_pstatus; // 支付状态码 20(支付成功,对使用实时银行卡进行扣款的订单);30(支付失败,对使用实时银行卡进行扣款的订单); protected string v_pstring; //支付状态描述 protected string v_pmode; //支付银行 protected string v_amount; //支付金额 protected string v_moneytype;//币种 protected string remark1; // 备注1 protected string remark2; // 备注1 protected string v_md5str; protected string status_msg; protected string str; StringBuilder sbSql = new StringBuilder(); StringBuilder sbHtml = new StringBuilder();

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) {

StreamReader sr = new StreamReader(Request.InputStream, Encoding.GetEncoding(936)); string query = sr.ReadToEnd(); System.Collections.Specialized.NameValueCollection reqResult = HttpUtility.ParseQueryString(query, Encoding.GetEncoding(936));

//MD5密钥要跟订单提交页相同,如Send.asp里的 key = “test” ,修改””号内 test 为您的密钥 //如果您还没有设置MD5密钥请登陆我们为您提供商户后台,地址:https://merchant3.chinabank.com.cn/ //登陆后在上面的导航栏里可能找到“B2C”,在二级导航栏里有“MD5密钥设置” //建议您设置一个16位以上的密钥或更高,密钥最多64位,但设置16位已经足够了 string key = GlobalFunctionDataBaseMutuality.GetItemParameter(GlobalFunctionDataBaseMutuality.ProgramParameter.OnLinekey); if (key.Trim() == “Error”) { Response.Write(“<script language=javascript>window.open(‘ErrorMessage.aspx’);</script>”); return; } //string key = “1H6G0Z0P83D70A1E8AF60F49C143A7B95”; v_oid = reqResult[“v_oid”]; v_pstatus = reqResult[“v_pstatus”]; v_pstring = reqResult[“v_pstring”]; v_pmode = reqResult[“v_pmode”]; v_md5str = reqResult[“v_md5str”]; v_amount = reqResult[“v_amount”]; v_moneytype = reqResult[“v_moneytype”]; remark1 = reqResult[“remark1”];//客户ID //remark2 = Request[“remark2”];

string str = v_oid v_pstatus v_amount v_moneytype key; str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, “md5”).ToUpper(); if (str == v_md5str) { if (v_pstatus.Equals(“20”)) { //支付成功 sbSql.Append(“Update tBaseOperator set nAccountBalance = nAccountBalance ” decimal.Parse(v_amount) ” where sGuidID = ‘” remark1 “‘”);

sbSql.Append(@”Insert into tWorkDownloadCharge (sGuidID,sGuidIDUser,sPaymentMode,sGuidIDOperator,nMoney,dChargeDatetime,dCreateDatetime,sComment,sVersion) values ( ‘” v_oid.ToString() “‘, ‘” remark1 “‘, ‘现金’, ‘” remark1 “‘, ” v_amount “, ‘” GlobalFunctionDataBaseMutuality.GetServerDateTime() “‘, ‘” GlobalFunctionDataBaseMutuality.GetServerDateTime() “‘, ”, ‘” DateTime.Now “‘ )”); if (!DataOperation.UpdateDataBySql(sbSql.ToString())) { Public.globalErrorString = DataOperation.globalErrorString; Response.Write(“<script language=javascript>window.open(‘ErrorMessage.aspx’);</script>”); //打开新窗口 return; } status_msg = “支付成功!”; //Response.Write(“<script language=javascript>alert(‘支付成功!’);window.location.href=’ShoppingCart.aspx'</script>”);

sbHtml.Append(“<table class=”border” cellspacing=”1” border=”0” style=”border-style: Solid; width: 50%;text-align: center;”>”); sbHtml.Append(“<tr><td valign=”top” align=”middle”><div align=”left”><b>订单号:” v_oid “</b></div></td></tr>”); sbHtml.Append(“<tr><td valign=”top” align=”middle”><div align=”left”><b>支付银行:” v_pmode “</b></div></td></tr>”); sbHtml.Append(“<tr><td valign=”top” align=”middle”><div align=”left”><b>支付结果:” v_pstring “</b></div></td></tr>”); sbHtml.Append(“<tr><td valign=”top” align=”middle”><div align=”left”><b>支付金额:” v_amount “</b></div></td></tr>”); sbHtml.Append(“<tr><td valign=”top” align=”middle”><div align=”left”><b>支付币种:” v_moneytype “</b></div></td></tr>”); sbHtml.Append(“<tr style=”display:none”><td valign=”top” align=”middle”><div align=”left”><b>备注1:” remark1 “</b></div></td></tr>”); sbHtml.Append(“<tr><td valign=”top” align=”center”>” status_msg “<a onclick=”window.opener=null;window.open(”,’_self’);window.open(‘ShoppingCart.aspx’,”);window.close();” style=”cursor: hand”>返回</a></td></tr></table>”); Literal1.Text = sbHtml.ToString(); } } else { status_msg = “校验失败,数据可疑”; sbHtml.Append(“<table class=”border” cellspacing=”1” border=”0” style=”border-style: Solid; width: 50%;text-align: center;”>”); sbHtml.Append(“<tr><td valign=”top” align=”center” style=”width:180px;”>” status_msg “<a onclick=”window.opener=null;window.open(”,’_self’);window.open(‘ShoppingCart.aspx’,”);window.close();” style=”cursor: hand”>返回</a></td></tr></table>”); Literal1.Text = sbHtml.ToString(); } } } }

注解: 代码里面有一些和我们项目相关的表的操作 请自行删除

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154772.html原文链接:https://javaforall.cn

0 人点赞