zoukankan      html  css  js  c++  java
  • 银联chinapay支付接口实现详解

    <?php
    header('Content-type: text/html; charset=gbk');
    include_once("netpayclient_config.php");
    ?>
    <title>支付交易</title>
    <?php
    //加载 netpayclient 组件
    include_once("netpayclient.php");
    
    //导入私钥文件, 返回值即为您的商户号,长度15位
    $merid = buildKey(PRI_KEY);
    if(!$merid) {
    echo "导入私钥文件失败!";
    exit;
    }
    //订单号跟商户号的关系:
    //商户提交给ChinaPay的交易订单号,订单号的第五至第九位必须是商户号的最后五位
    
    //生成订单号,定长16位,任意数字组合,一天内不允许重复,必填
    $ordid = ecshopsn2chinapaysn(date('Ymd').mt_rand(10000,99999),$merid);
    //订单金额,定长12位,以分为单位,不足左补0,必填
    $transamt = formatamount(0.01);
    
    //货币代码,3位,境内商户固定为156,表示人民币,必填
    $curyid = "156";
    
    //订单日期,本例采用当前日期,必填
    $transdate = date('Ymd',time());
    //交易类型,0001 表示支付交易,0002 表示退款交易
    $transtype = "0001";
    //接口版本号,有两个支付版本: 20070129、20040916,客户是808080开头的,就用04版本,必填
    $version = "20040916";
    //页面返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,银行页面会自动跳转到该页面,并POST订单结果信息,可选
    $pagereturl = "$site_url/netpayclient_order_feedback.php";
    //后台返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,我方服务器会POST订单结果信息到该页面,必填
    $bgreturl = "$site_url/netpayclient_order_feedback.php";
    
    /************************
    页面返回地址和后台返回地址的区别:
    后台返回从我方服务器发出,不受用户操作和浏览器的影响,从而保证交易结果的送达。
    ************************/
    
    //支付网关号,4位,上线时建议留空,以跳转到银行列表页面由用户自由选择,本示例选用0001农商行网关便于测试,可选
    $gateid = "";
    //备注,最长60位,交易成功后会原样返回,可用于额外的订单跟踪等,可选
    $priv1 = "memo"; 
    //官方手册有两种签名方式:
    //04的应该是第二种
    
    //第一种:
    //按次序组合订单信息为待签名串
    //$plain = $merid . $ordid . $transamt . $curyid . $transdate .$transtype.$priv1;
    
    //生成签名值,必填
    //$chkvalue = sign($plain);
    
    //第二种:
    //生成签名值,必填
    
    $chkvalue = signOrder($merid,$ordid,$transamt,$curyid,$transdate,$transtype);
    
    if (!$chkvalue) {
    echo "签名失败!";
    exit;
    }
    
    ?>
    <?php
    /*
    *本地订单号转为银联订单号
    */
    function ecshopsn2chinapaysn($order_sn, $vid){
    if($order_sn && $vid){
    $sub_vid = substr($vid, 10, 5);
    $sub_start = substr($order_sn, 2, 4);
    $sub_end = substr($order_sn, 6);
    $temp = $pay_id;
    return $sub_start . $sub_vid . $sub_end;
    }
    }
    
    /*
    *银联订单号转为本地订单号
    */
    function chinapaysn2ecshopsn($chinapaysn){
    if($chinapaysn){ 
    $year = date('Y',time());
    
    return substr($year,0,2) . substr($chinapaysn, 0, 4) . substr($chinapaysn, 9) ;
    }
    }
    
    /*
    *格式化交易金额,以分位单位的12位数字。
    */
    function formatamount($amount){
    if($amount){
    if(!strstr($amount, ".")){
    $amount = $amount.".00";
    }
    $amount = str_replace(".", "", $amount);
    $temp = $amount;
    for($i=0; $i< 12 - strlen($amount); $i++){
    $temp = "0" . $temp;
    }
    return $temp;
    }
    }
    
    ?>
    <p> 本接口需要 mcrypt 和 bcmath 两个PHP扩展库的支持,请查看<a href="phpinfo.php" target="_blank">配置</a></p>
    <h1>支付交易</h1>
    <h5><a href="javascript:window.location.reload()">刷新本页以改变订单号</a></h5>
    
    <form action="<?php echo REQ_URL_PAY; ?>" method="post" target="_blank">
    <label>商户号</label><br/>
    <input type="text" name="MerId" value="<? echo $merid; ?>" readonly /><br/>
    <label>订单号</label><br/>
    <input type="text" name="OrdId" value="<? echo $ordid; ?>" readonly/><br/>
    <label>订单金额</label><br/>
    <input type="text" name="TransAmt" value="<? echo $transamt; ?>" readonly/><br/>
    <label>货币代码</label><br/>
    <input type="text" name="CuryId" value="<? echo $curyid; ?>" readonly/><br/>
    <label>订单日期</label><br/>
    <input type="text" name="TransDate" value="<? echo $transdate; ?>" readonly/><br/>
    <label>交易类型</label><br/>
    <input type="text" name="TransType" value="<? echo $transtype; ?>" readonly/><br/>
    <label>支付版本号</label><br/>
    <input type="text" name="Version" value="<? echo $version; ?>" readonly/><br/>
    <label>后台返回地址</label><br/>
    <input type="text" name="BgRetUrl" value="<? echo $bgreturl; ?>"/><br/>
    <label>页面返回地址</label><br/>
    <input type="text" name="PageRetUrl" value="<? echo $pagereturl; ?>"/><br/>
    <label>网关号</label><br/>
    <input type="text" name="GateId" value="<? echo $gateid; ?>"/><br/>
    <label>备注</label><br/>
    <input type="text" name="Priv1" value="<? echo $priv1; ?>" readonly/><br/>
    <label>签名值</label><br/>
    <input type="text" name="ChkValue" value="<? echo $chkvalue; ?>" readonly/><br/>
    <input type="submit" value="支付">
    </form>
  • 相关阅读:
    二分图匹配初步
    动态规划初步
    一些排日程的经典方法
    petri网初步
    笔记:美国院士教你写论文
    Ubuntu18.04彻底删除MySQL数据库
    ubuntu18.04 安装 wps2019
    ubuntu18.04 阿里镜像源
    Ubuntu 18.04 使用标准Ubuntu 仓库进行自动化安装NVIDIA驱动
    linux maven环境变量配置
  • 原文地址:https://www.cnblogs.com/fyy-888/p/5323192.html
Copyright © 2011-2022 走看看