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

通过网银在线进行在线支付[通俗易懂]总结一下在我们一个项目中使用的通过网银在线进行在线支付的步骤:下面我用一个asp.net的例子做一下说明:一共建立2个页面Send.aspx(发送交易数据给网银在线)和Receive.as

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

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

下面我用一个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();
            }
        }
    }
  
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • p2p流媒体平台有哪些(p2p工作模式)

    P2P流媒体开源项目介绍1.PeerCast2002年成立,最早的开源P2P流媒体项目。PeerCast把节点按树结构组织起来,每个频道都是一个树,直播源是根节点,父节点只给子节点提供数据。节点离根节点越远,传输时延就越大,所以树的深度应该尽可能短,但节点有限的上行带宽限制了节点的宽度。 2.Tribler2008年开始的项目,既能实现BT下载,还能播放视频的点播和直播…

  • stm32 nvic配置

    stm32 nvic配置STM32有43个channel的settable的中断源;AIRC(ApplicationInterruptandResetRegister)寄存器中有用于指定优先级的4bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下/*PreemptionPriorityGroup————————–

  • 一文完全理解模型ks指标含义并画出ks曲线(包含代码和详细解释)「建议收藏」

    KS(Kolmogorov-Smirnov):KS用于模型风险区分能力进行评估,指标衡量的是好坏样本累计分部之间的差值。好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。——神秘的KS值和GINI系数上面是ks的简单介绍,相信大家看了这几句话,肯定还是不懂ks到底是个什么。我也是研究了比较久,终于搞清楚了ks的具体计算方式。搞清楚了计算方式后,ks的含义自然就清楚了。下面…

  • [HDU 2096] 小明A+B

    [HDU 2096] 小明A+B[HDU2096]小明A+B 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=20961#include&lt;iostream&gt;2#include&lt;cstdio&gt;3#include&lt;cmath&gt;4#include&lt;algori…

  • 广义最小二乘法是加权最小二乘法的特例_简述广义最小二乘法

    广义最小二乘法是加权最小二乘法的特例_简述广义最小二乘法所谓回归分析实际上就是根据统计数据建立一个方程,用这个方程来描述不同变量之间的关系,而这个关系又无法做到想像函数关系那样准确,因为即使你重复全部控制条件,结果也还有区别,这时通过让回归方程计算值和试验点结果间差值的平方和最小来建立 回归方程的办法就是最小二乘法,二乘的意思就是平方。最小二乘就是指回归方程计算值和实验值差的平方和最小。首先普通最小二乘法是作为回归来使用,将预测值和真实值…

  • 关于checkbox选中问题总结「建议收藏」

    关于checkbox选中问题总结「建议收藏」(1)ng-checked的值只是用来决定初始状态时选中还是为选中,ng-model才是随着复选框是否被选中,来实时改变它绑定变量的值。(2)如果初始状态ng-checked和ng-model指令

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号