• 银联接口返回值说明


     

     

     

    netpayclient.jar 为用于java和jsp开发的jar包,适用于各个操作系统。jdk版本为1.4。

     

    客户端签名和验签方法说明
    public String signOrder(String MerId, String OrdId, String TransAmt, String CuryId, String TransDate, String TransType)
    参数说明:
    String MerId - 商户号,长度为15个字节的数字串,由ChinaPay或清算银行分配。
    String OrdId - 订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。
    String TransAmt - 交易金额,长度为12个字节的数字串,例如:数字串"000000001234"表示12.34元。
    String CuryId - 货币代码, 长度为3个字节的数字串,目前只支持人民币,取值为"156" 。
    String TransDate - 交易日期,长度为8个字节的数字串,表示格式为:YYYYMMDD。
    String TransType - 交易类型,长度为4个字节的数字串,取值范围为:"0001"和"0002", 其中"0001"表示消费交易
    返回值:
    String CheckValue[256] - 即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的字符串。

     

    ○ 使用说明
    商户在向消费者发送订单确认页面之前,调用本函数或方法产生订单签名(CheckValue),然后生成订单确认页面,供消费者再次确认订单的内容,并允许消费者选择支付或取消订单。订单确认页面中表单(FORM)的具体例子如下(注意各字段的大小写):

     

    <form action="https://payment.chinapay.com/pay/TransGet" METHOD=POST>
    <input type=hidden name="MerId" value="123451234512345">
    <input type=hidden name="OrdId" value="0000000000000001">
    <input type=hidden name="TransAmt" value="000000001234">
    <input type=hidden name="CuryId" value="156">
    <input type=hidden name="TransDate" value="20000315">
    <input type=hidden name="TransType" value="0001">
    <input type=hidden name="Version" value="20040916">(接口版本号)
    <input type=hidden name="BgRetUrl" value="http://www.XXX.com/pay/payback1.php">(后台交易接收URL,长度不要超过80个字节)
    <input type=hidden name="PageRetUrl" value="http://www.XXX.com/pay/payback2.php">(页面交易接收URL,长度不要超过80个字节)
    <input type=hidden name="GateId" value="0001">(支付网关号,可选)
    <input type=hidden name="Priv1" value="Memo">(商户私有域,可选,长度不要超过60个字节)
    <input type=hidden name="ChkValue" value="X…X">(256字节长的ASCII码)
    </form>
    注:其中GateId和Priv1为可选项,分别表示 “支付网关号”和“保留字段”。 如填写GateId(支付网关号),则消费者将直接进入支付页面,否则进入网关选择页面。具体网关见表1。Priv1为商户私有域,商户通过此字段向Chinapay发送的信息,Chinapay依原样填充返回给商户。当使用版本号“20040916”时,BgRetUrl和PageRetUrl必须填写。

     


    JAVA版安装及调用
    7.4.1 安装
    将netpayclinet.jar安装到服务器的classpath下。将MerPrk1.key、MerPrk2.key和PgPubk.key复制到服务器上可以访问的路经下,例如/app/usr/chinapay/keys。
    7.4.2 使用方法
    初始化key文件。方法如下:
    chinapay.PrivateKey key1=new chinapay.PrivateKey();
    chinapay.SecureLink t;
    boolean flag;
    flag=key1.buildKey(MerId,0,"app/usr/chinapay/keys/MerPrk1.key"); //注意要用哪一个商户号签名就要用对应的key文件。
    if (flag==false)
    {
    System.out.println("build key error!");
    return;
    }
    t1=new chinapay.SecureLink (key1);
    String CheckValue1=t1.signOrder(MerId,OrdId,TransAmt,CuryId,TransDate,TransType); //获得对应商户的签名数据。

     

    //使用另外一个商户key文件
    chinapay.PrivateKey key2=new chinapay.PrivateKey();
    chinapay.SecureLink t;
    boolean flag;
    flag=key2.buildKey(MerId,0,"app/usr/chinapay/keys/MerPrk2.key");
    if (flag==false)
    {
    System.out.println("build key error!");
    return;
    }
    t2=new chinapay.SecureLink (key2); //获得对应另外商户的签名数据。

     

    7.4.3 函数说明
    ○ 订单签名函数
    String CheckValue=t1.signOrder(MerId,OrdId,TransAmt,CuryId,TransDate,TransType);

     

    ○ 验证交易应答函数
    boolean flag=t1.verifyTransResponse( MerId,OrdId, TransAmt, CuryId, TransDate,TransType, OrderStatus, CheckValue);(使用该函数时应使用PgPubk.key进行初始化key文件)

     

    注:ChinaPay post过来的参数为:merid,orderno,amount,currencycode,transdate,transtype,status,checkvalue; 其含义跟上面一一对应。
    注:各函数中的参数说明,请查阅函数说明。

     


    典型代码示例
    7.6.1 商户发送订单至Chinapay的jsp代码示例
    String MerId, OrdId, TransAmt, CuryId, TransDate, TransType,ChkValue;
    /* …… 给以上变量分别赋值 */

     

    chinapay.PrivateKey key=new chinapay.PrivateKey();
    chinapay.SecureLink t;
    boolean flag;
    flag=key.buildKey("200401160000001",0,"D:\MerPrk.key");
    if (flag==false)
    {
    System.out.println("build key error!");
    return;
    }
    t=new chinapay.SecureLink (key);
    ChkValue= t.signOrder(MerId, OrdId, TransAmt, CuryId, TransDate, TransType) ;

     

    <form action="https://payment.chinapay.com/pay/TransGet" METHOD=POST>
    <input type=hidden name="MerId" value=MerId >
    <input type=hidden name="OrdId" value=OrdId >
    <input type=hidden name="TransAmt" value="000000001234">
    <input type=hidden name="CuryId" value="156">
    <input type=hidden name="TransDate" value="20040315">
    <input type=hidden name="TransType" value=TransType >
    <input type=hidden name="Version" value="20040916">
    <input type=hidden name="BgRetUrl" value="http://www.XX.com/pay/payback1.php">
    <input type=hidden name="PageRetUrl" value="http://www.XX.com/pay/payback2.php">
    <input type=hidden name="GateId" value="0001">
    <input type=hidden name="Priv1" value="Memo">
    <input type=hidden name="ChkValue" value=ChkValue>
    </form>

     

    7.6.2 商户接收Chinapay应答JSP代码示例
    商户接收Chinapay应答模块,文件名getChinapayRet.jsp,代码段如下:

     

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page contentType="text/html;charset=GB2312" %>
    <%@ page import="java.io.*,java.lang.*,java.util.*,chinapay.*" %>

     

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <link TYPE="text/css" HREF="mystyle.css" REL="stylesheet" TITLE="mystyle">
    </head>

     

    <%
    String TransDate = null ;
    String MerId = null ;
    String OrdId = null ;
    String TransType = null ;
    String TransAmt = null ;
    String CuryId = null ;
    String ChkValue = null ;
    String OrderStatus= null ;
    String GateId = null ;

     

    try
    {
    TransDate = request.getParameter("transdate") ;
    MerId = request.getParameter("merid") ;
    OrdId = request.getParameter("orderno");
    TransType = request.getParameter("transtype") ;
    TransAmt = request.getParameter("amount") ;
    CuryId = request.getParameter("currencycode") ;
    OrderStatus = request.getParameter("status") ;
    ChkValue = request.getParameter("checkvalue") ;

     

    chinapay.PrivateKey key=new chinapay.PrivateKey();
    chinapay.SecureLink t;
    boolean flag;
    boolean flag1;
    String msg="";

    flag=key.buildKey("999999999999999",0,"c:\winnt\PgPubk.key");
    if (flag==false)
    {
    msg="build key error!";
    return;
    }

     

    t=new chinapay.SecureLink (key);
    flag1=t.verifyTransResponse( MerId,OrdId, TransAmt, CuryId, TransDate, TransType, OrderStatus, ChkValue);

     

    if (flag1==false)
    {
    System.out.println("交易验证失败!");
    msg="交易验证失败!";
    }
    else
    {
    /* …... 数据库更新等相关处理过程 */
    }
    }
    catch(Exception e)
    {
    out.println(e.getMessage());
    return;
    }
    %>

     


     

  • 相关阅读:
    ORM开发之解析lambda实现完整查询(附测试例子)
    ORM开发之解析lambda实现group查询(附测试例子)
    ORM之殇,我们需要什么样的ORM框架?
    公开封尘已久的即时通讯源码
    javascript中的this与函数讲解
    javascript中的操作符详解1
    javascript中的继承与深度拷贝
    javascript之Object.defineProperty的奥妙
    javascript之活灵活现的Array
    jquery.Callbacks的实现
  • 原文地址:https://www.cnblogs.com/linwenbin/p/10500113.html
Copyright © 2020-2023  润新知