zoukankan      html  css  js  c++  java
  • 民生银行接口实例demo

    接口文档

    参数 N为不可空参数

    1:from表单 提交商户数据给银行 通过跳转至epayapi.php页面

     <!-- 民生银行支付接口 -->
                      <form action="<?php echo $this->createUrl('Payment/cmbcpay')?>" method=post target="_blank">
                        <div style="display: none;">
                            <input type=hidden name="service"       value="create_direct_pay_by_user"/>
                            <input type=hidden name="partner_id"    value="1002201305272380"/><!--商户在民生支付平台的用户ID -->
                              <input type=hidden name="sign_type"     value="MD5"/>   
                              <input type=hidden name="out_trade_no"  value="<?php echo str_pad(@$OrderInfo['PayNumber'],30,"0",STR_PAD_LEFT)?>"/>
                              <input type=hidden name="amount"        value="<?php echo @$OrderInfo['TotalMoney']?>"/>
                              <input type=hidden name="payMethod"     value="bankPay"/>
                              <input type=hidden name="seller_email"  value="cmbc188@163.com"/><!--卖家账号 -->
                              <input type=hidden name="notify_url"    value="http://epay.cmbc.com.cn/payment/CmbcPayNotify.jsp"/><!--可以空-->
                             <input type=hidden name="subject"       value="<?php echo @XUtils::cutstr($OrderInfo['OrderName'],30)?>"/>
                              <input type=hidden name="buyer_email"   value=""/>
                              <input type=hidden name="body"          value="详细内容"/>
                              <input type=hidden name="input_charset" value="utf-8"/>
                              <input type=hidden name="show_url"      value=""/>
                              <input type=hidden name="default_bank"  value="300904"/>
                              <input type=hidden name="return_url"    value="http://epay.cmbc.com.cn"/> <!--返回商户页面 -->
                              <input type=hidden name="royalty_parameters"   value=""/>
                              <input type=hidden name="signkey"       value="d1738053d38616dc27d72a2642a1c0bb"/> <!--秘钥 -->
                              
                        </div>
                          <li>
                          <div class="pay_boxin pay_curr">
                         <span class="left"><img src="<?php echo Yii::app()->request->baseUrl ?>/assets/default/images/msyh.png" height="40px">民生银行</span>
                            <span class="pay_money right">
                         <p>支付<strong><?php echo @sprintf('%0.2f',$OrderInfo['TotalMoney'])?></strong></p>
                            </span>
                         </div>
                             <input type="submit" style="220px; height:50px; border:0px; margin:30px 0 0 500px; background: url(<?php echo Yii::app()->request->baseUrl ?>/assets/default/images/pay_quite.png) center no-repeat; cursor:pointer;" value="" >
                      <div class="pay_disno" style="margin:30px 0 0 500px;"><img src="<?php echo Yii::app()->request->baseUrl ?>/assets/default/images/pay_quite.png"></div>
                        </li>    
                 </form>
    View Code

    2:epayapi.php 接受提交的参数并进行验证 建立请求

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>e支付即时到账交易接口接口/验证</title>
    </head>
    <?php
    /* *
     * 功能:即时到账交易接口接入页
     * 版本:1.0
     * 修改日期:2013-12-14
     * 说明:
     * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
     * 该代码仅供学习和研究e支付接口使用,只是提供一个参考。
    
     */
    
    require_once("lib/epay_submit.class.php");
    /**************************请求参数**************************/
    
                    $service = $_POST['service'];//接口名称
                    $partner_id = $_POST['partner_id'];//合作商ID
                    $input_charset = $_POST['input_charset'];//编码方式
                    $sign_type = $_POST['sign_type'];//签名类型
                    $out_trade_no = $_POST['out_trade_no'];//外部订单号 30位
                    $amount = $_POST['amount'];//交易金额
                    $payMethod = $_POST['payMethod'];//支付方式
                    $seller_email = $_POST['seller_email'];//卖家账号
                    $notify_url = $_POST['notify_url'];//通知地址
                    $subject = $_POST['subject'];//交易标题
                    $buyer_email = $_POST['buyer_email'];//买家账号
                    $body = $_POST['body'];//交易详细内容
                    $show_url = $_POST['show_url'];//商品展示网址
                    $default_bank = $_POST['default_bank'];//默认银行
                    $return_url = $_POST['return_url'];//跳转地址    
                    $royalty_parameters = $_POST['royalty_parameters'];//分润账号    
                    $signkey = $_POST['signkey'];//签约密钥
    
    
    /************************************************************/
    
    //构造要请求的参数数组,无需改动
    $parameter = array(
            "service"    => $service,
            "partner_id"    => $partner_id,
            "input_charset"    => $input_charset,
            "sign_type"    => $sign_type,
            "out_trade_no"    => $out_trade_no,
            "amount"    => $amount,
            "payMethod"    => $payMethod,
            "seller_email"    => $seller_email,
            "notify_url"    => $notify_url,
            "subject"    => $subject,
            "buyer_email"    => $buyer_email,
            "body"    => $body,
            "show_url"    => $show_url,
            "default_bank"    => $default_bank,
            "return_url"    => $return_url,
            "royalty_parameters"    => $royalty_parameters
    );
    
    //建立请求
    $epaySubmit = new EpaySubmit();
    $html_text = $epaySubmit->buildRequestForm($parameter, $signkey,"get", "确认");
    echo $html_text;
    
    ?>
    </body>
    </html>
    View Code

    3:lib/epay_submit.class.php 接口请求提交类  

    <?php
    /* 
     * 类名:EpaySubmit
     * 功能:e支付各接口请求提交类
     * 详细:构造e支付各接口表单HTML文本,获取远程HTTP数据
     * 版本:1.0
     * 修改日期:2013-12-14
     * 说明:
     * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
     * 该代码仅供学习和研究e支付接口使用,只是提供一个参考。
     */
    require_once("epay_core.function.php");
    require_once("epay_md5.function.php");
    
    class EpaySubmit {
        /**
         *e支付网关地址(新)
         */
        var $epay_gateway_new = 'https://epay.cmbc.com.cn/ipad/service.html?';
    
        function __construct(){
        }
        function EpaySubmit() {
        }
        
        /**
         * 生成签名结果
         * @param $para_sort 已排序要签名的数组
         * return 签名结果字符串
         */
        function buildRequestMysign($para_sort, $signkey) {
            //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
            $prestr = createLinkstring($para_sort);
            
            $mysign = md5Sign($prestr, $signkey);
            return $mysign;
        }
    
        /**
         * 生成要请求给e支付的参数数组
         * @param $para_temp 请求前的参数数组
         * @return 要请求的参数数组
         */
        function buildRequestPara($para_temp, $signkey) {
            //除去待签名参数数组中的空值和签名参数
            $para_filter = paraFilter($para_temp);
    
            //对待签名参数数组排序
            $para_sort = argSort($para_filter);
    
            //生成签名结果
            $mysign = $this->buildRequestMysign($para_sort, $signkey);
            
            //签名结果与签名方式加入请求提交参数组中
            $para_sort['sign'] = $mysign;
            
            return $para_sort;
             
        }
    
        
        /**
         * 建立请求,以表单HTML形式构造(默认)
         * @param $para_temp 请求参数数组
         * @param $method 提交方式。两个值可选:post、get
         * @param $button_name 确认按钮显示文字
         * @return 提交表单HTML文本
         */
        function buildRequestForm($para_temp, $signkey, $method, $button_name) {
            //待请求参数数组
            $para = $this->buildRequestPara($para_temp, $signkey);
            
            $sHtml = "<form id='epaysubmit' name='epaysubmit' action='".$this->epay_gateway_new."_input_charset=utf-8"."' method='".$method."'>";
            while (list ($key, $val) = each ($para)) {
                $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
            }
    
            //submit按钮控件请不要含有name属性
            $sHtml = $sHtml."<input id='submt' style='display:none;' type='submit' value='".$button_name."'></form>";
            
            $sHtml = $sHtml."<script>document.getElementById('submt').click();</script>";
            //document.forms['epaysubmit'].submit();
            return $sHtml;
        }
    }
    ?>
    View Code

    4:epay_md5.function.php MD5加密

    <?php
    /* *
     * MD5
     * 详细:MD5加密
     * 版本:1.0
     * 修改日期:2013-12-14
     * 说明:
     * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
     * 该代码仅供学习和研究e支付接口使用,只是提供一个参考。
     */
    
    /**
     * 签名字符串
     * @param $prestr 需要签名的字符串
     * @param $key 私钥
     * return 签名结果
     */
    function md5Sign($prestr, $key) {
        $prestr = $prestr . $key;
        return md5($prestr);
    }
    
    /**
     * 验证签名
     * @param $prestr 需要签名的字符串
     * @param $sign 签名结果
     * @param $key 私钥
     * return 签名结果
     */
    function md5Verify($prestr, $sign, $key) {
        $prestr = $prestr . $key;
        $mysgin = md5($prestr);
    
        if($mysgin == $sign) {
            return true;
        }
        else {
            return false;
        }
    }
    ?>
    View Code

    5:epay_core.function.php 接口公用函数

    <?php
    /* *
     * e支付接口公用函数
     * 详细:该类是请求、通知返回两个文件所调用的公用函数核心处理文件
     * 版本:1.0
     * 修改日期:2013-12-14
     * 说明:
     * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
     * 该代码仅供学习和研究e支付接口使用,只是提供一个参考。
     */
    
    /**
     * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
     * @param $para 需要拼接的数组
     * return 拼接完成以后的字符串
     */
    function createLinkstring($para) {
        $arg  = "";
        while (list ($key, $val) = each ($para)) {
            $arg.=$key."=".$val."&";
        }
        //去掉最后一个&字符
        $arg = substr($arg,0,count($arg)-2);
        
        //如果存在转义字符,那么去掉转义
        if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
        
        return $arg;
    }
    /**
     * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码
     * @param $para 需要拼接的数组
     * return 拼接完成以后的字符串
     */
    function createLinkstringUrlencode($para) {
        $arg  = "";
        while (list ($key, $val) = each ($para)) {
            $arg.=$key."=".urlencode($val)."&";
        }
        //去掉最后一个&字符
        $arg = substr($arg,0,count($arg)-2);
        
        //如果存在转义字符,那么去掉转义
        if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
        
        return $arg;
    }
    /**
     * 除去数组中的空值和签名参数
     * @param $para 签名参数组
     * return 去掉空值与签名参数后的新签名参数组
     */
    function paraFilter($para) {
        $para_filter = array();
        while (list ($key, $val) = each ($para)) {
            if($val == "")continue;
            else    $para_filter[$key] = $para[$key];
        }
        return $para_filter;
    }
    /**
     * 对数组排序
     * @param $para 排序前的数组
     * return 排序后的数组
     */
    function argSort($para) {
        ksort($para);
        reset($para);
        return $para;
    }
    /**
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * 注意:服务器需要开通fopen配置
     * @param $word 要写入日志里的文本内容 默认值:空值
     */
    function logResult($word='') {
        $fp = fopen("log.txt","a");
        flock($fp, LOCK_EX) ;
        fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."
    ".$word."
    ");
        flock($fp, LOCK_UN);
        fclose($fp);
    }
    
    /**
     * 远程获取数据,POST模式
     * 注意:
     * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
     * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\cacert.pem'
     * @param $url 指定URL完整路径地址
     * @param $cacert_url 指定当前工作目录绝对路径
     * @param $para 请求的数据
     * @param $input_charset 编码格式。默认值:空值
     * return 远程输出的数据
     */
    function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
    
        if (trim($input_charset) != '') {
            $url = $url."_input_charset=".$input_charset;
        }
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
        curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
        curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
        curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
        curl_setopt($curl,CURLOPT_POST,true); // post传输数据
        curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据
        $responseText = curl_exec($curl);
        //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
        curl_close($curl);
        
        return $responseText;
    }
    
    /**
     * 远程获取数据,GET模式
     * 注意:
     * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
     * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\cacert.pem'
     * @param $url 指定URL完整路径地址
     * @param $cacert_url 指定当前工作目录绝对路径
     * return 远程输出的数据
     */
    function getHttpResponseGET($url,$cacert_url) {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
        curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
        curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
        $responseText = curl_exec($curl);
        //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
        curl_close($curl);
        
        return $responseText;
    }
    
    /**
     * 实现多种字符编码方式
     * @param $input 需要编码的字符串
     * @param $_output_charset 输出的编码格式
     * @param $_input_charset 输入的编码格式
     * return 编码后的字符串
     */
    function charsetEncode($input,$_output_charset ,$_input_charset) {
        $output = "";
        if(!isset($_output_charset) )$_output_charset  = $_input_charset;
        if($_input_charset == $_output_charset || $input ==null ) {
            $output = $input;
        } elseif (function_exists("mb_convert_encoding")) {
            $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
        } elseif(function_exists("iconv")) {
            $output = iconv($_input_charset,$_output_charset,$input);
        } else die("sorry, you have no libs support for charset change.");
        return $output;
    }
    /**
     * 实现多种字符解码方式
     * @param $input 需要解码的字符串
     * @param $_output_charset 输出的解码格式
     * @param $_input_charset 输入的解码格式
     * return 解码后的字符串
     */
    function charsetDecode($input,$_input_charset ,$_output_charset) {
        $output = "";
        if(!isset($_input_charset) )$_input_charset  = $_input_charset ;
        if($_input_charset == $_output_charset || $input ==null ) {
            $output = $input;
        } elseif (function_exists("mb_convert_encoding")) {
            $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
        } elseif(function_exists("iconv")) {
            $output = iconv($_input_charset,$_output_charset,$input);
        } else die("sorry, you have no libs support for charset changes.");
        return $output;
    }
    ?>
    View Code

    另外  参数default_bank 默认为民生银行 如果要接入其他银行 可以填写参数,下面是民生银行支持接入的银行参数

          

  • 相关阅读:
    linux 挂载本地iso
    安装python
    QT中如何使用MYSQL 以及静态编译QT中如何加上MYSQL(2)
    qt中如何使用mysql 以及静态编译qt中如何加上mysql(1)
    关于写qt项目时的代码格式问题
    qt相关学习以及 qt creator如何静态编译
    Qt Creator中如何在QLabel上画矩形框并且保存画完后的图形
    android localsocket 传输大量数据的问题
    android binder使用demo
    android binder使用
  • 原文地址:https://www.cnblogs.com/huii/p/4727169.html
Copyright © 2011-2022 走看看