银联在线支付

简介

银联在线支付支持PC网关、手机SDK、WAP网关、云闪付等多种支付场景,其中云闪付产品可以完美支持ApplePay、Samsung Pay、Huawei Pay等市面上常见的手机厂商推出的支付品牌,对接银联在线支付,可弥补因无微信客户端和支付宝客户端所造成的用户流失,还可以做形式多样的支付优惠活动,银联可通过对商户号交易控制实现其立减、满减等支付优惠活动。

支付流程

根据开发文档组织支付报文,发起网关支付请求。APP支付,需要curl请求支付网关(appTransReq.do),获取到tn码,然后app通过tn码发起支付请求。PC、WAP网关支付,则直接将支付报文通过表单POST提交至银联支付网关(frontTransReq.do)。

签名机制

银联在线支付,商户端在调用支付网关、退款网关、支付查询网关、退款查询网关等业务需要使用OpenSSL对报文进行非对称加密,加密证书类型为RSA,加密算法为SHA-1。同样,商户端对来自银联发来的数据报文,也要同样的使用银联提供的公钥文件对其签名做验证操作;

在线开发文档

https://open.unionpay.com/ajweb/product

证书下载、导出流程

https://open.unionpay.com/ajweb/help/file/techFile?cateLog=agreement

银联在线支付签名验签算法

  • PHP版本
/**
 * 银联在线支付demo
 * 使用OpenSSL进行非对称加密、验签
 * @author think2017@gmail.com
 */
class chinapayPayment
{    

    public function __construct()
    {
    }

    /**
     **@desc 获取支付请求报文
     **/
    public function ransReqParams()
    {        //Todo...
    }

    /**
     **@desc 退款申请
     **/
    public function doRefund()
    {        //Todo...
    }

    /**
     **@desc 支付查询
     **/
    public function doQuery()
    {        //Todo...
    }

    /**
     **@desc 退款查询
     **/
    public function doRefundQuery()
    {        //Todo...
    }

    /**
    * 使用商户私钥文件对报文进行签名
    */
    public function signature($postPrams)
    {        ksort($postPrams);        $strInfo = '';
        foreach ($postPrams as $key=>$val) {            if($strInfo){                $strInfo .= "&".$key."=".$val;
            }else{                $strInfo = $key."=".$val;
            }
        }

        $retval = $this->readPrivateKeyData();

        if ($retval['code'] != 200) {           return false;
        }        $sha1x16 = sha1($strInfo, FALSE);
        if (openssl_sign($sha1x16, $signature, $retval['privateKey'], OPENSSL_ALGO_SHA1)) {            $signatureBase64 = base64_encode($signature);
        }        return $signatureBase64 ? $signatureBase64 : false;
    }

    /**
    * 使用银行公钥文件进行验签
    */
    public function verfiySign($requestData)
    {        $retval = $this->readPublicKeyData();

        if ($retval['code'] != 200) {           return false;
        }

        $isSuccess = false;

        if( $retval['certId'] == $requestData['certId'] ){            $signature = $requestData['signature'];
            unset($requestData['signature']);
            $sRequest = $this->coverParamsToString($requestData);
            $sha1x16 = sha1($sRequest, false);
            $isSuccess = openssl_verify($sha1x16, base64_decode($signature), $retval['publicKey'], OPENSSL_ALGO_SHA1);
        }

        return $isSuccess;
    }
        /**
     * 读取商户私钥,私钥证书文件后缀为.pfx
    **/
    private function readPrivateKeyData()
    {        $pkcs12 = file_get_contents($this->privateKeyFile);        if (openssl_pkcs12_read($pkcs12, $certs, $this->privatekeyPass)) {
            $x509data = $certs ['cert'];
            openssl_x509_read ( $x509data );
            $certdata = openssl_x509_parse ( $x509data );
            return ['code' => 200, 'certId' => $certdata['serialNumber'], 'privateKey' => $certdata['pkey']];
        }

        return ['code' => 500, 'certId' => '', 'privateKey' => ''];
    }

        /**
     * 读取银行公钥,公钥证书文件后缀为.cer
    **/
    private function readPublicKeyData()
    {        $x509data = file_get_contents($this->publicKeyFile);
        openssl_x509_read($x509data);
        $certdata = openssl_x509_parse($x509data);

        if ($certdata) {            return ['code' => 200, 'certId' => $certdata['serialNumber'], 'publicKey' => $x509data];
        }

        return ['code' => 500, 'certId' => '', 'publicKey' => ''];
    }
    /**
     * 数组 排序后转化为字体串
     * @param array $params
     * @return string
     */
    public function coverParamsToString($params)
    {        $strSign = '';
        ksort($params);
        foreach($params as $key => $val){            if($key == 'signature'){                continue;
            }
            $strSign .= sprintf("%s=%s&", $key, $val);
        }
        return substr($strSign, 0, strlen($strSign) - 1);
    }
}

银联在线支付对接流程以及签名算法相关推荐

  1. 银联在线支付功能流程

    1.入网流程 2.资金流程 3.交易流程 入网过程总结如下 1.选择产品 以网关支付为例 2.选择收单机构 3.与收单机构联系,收单机构以邮件的方式下发入网协议, 商户准备入网资料(入网申请表,入网协 ...

  2. 银联在线支付从upop切换到全渠道的交易流程

    2019独角兽企业重金招聘Python工程师标准>>> 银联在线支付在2014年重建了一个新的系统(全渠道acp)代替老系统(upop),并2014-2015期间将所有商户从upop ...

  3. 第三方支付平台:银联在线支付

    前言 现将银联在线支付所需相关资料整理如下,前期资料仅涉及相关支付接口内容初步了解,不涉及具体技术实现环节. 银联商户注册所需信息 1.填写两方合作协议并打印二份盖章,一式二份(法定代表人签字盖公章并 ...

  4. 银联在线支付5100030异常

    对接银联在线支付时候,打开银联在线接口返回的html后,提示报文格式错误 5100030 银联在线错误码

  5. 关于银联在线支付和短彩信接口的开发——总结

    9月份开始做用二维码做闭环的一个在线订购景区门票的项目,其中这样做是很好的,用二维码连接了线上与线下的交易和兑券.银联在线支付接口(asp.net cs)做的很好,方便调用开发.就是处理回值的时候得找 ...

  6. 银联在线php支付接口,ecshop银联在线支付接口插件(官方版)

    分享一个银联在线支付(UPOP)ecshop支付接口的插件,亲自用过.你只需放到ec对应的目录,然后进到后台"支付方式"页面安装就能调用了.希望能对你有用!! 此插件在ecshop ...

  7. java银联在线支付开发_银联在线支付案例代码

    [实例简介] 银联在线支付的测试案例代码 [实例截图] [核心代码] PayOnLine └── PayOnLine ├── src │   ├── acp_sdk.properties │   └─ ...

  8. Firefox全面兼容中国银联“在线支付”

    http://www.linuxdiyf.com/viewarticle.php?id=202865 来源: 驱动之家 昨日下午,中国银联正式推出了"在线支付"和"互联网 ...

  9. “银联在线支付”签约无需任何条件,个人也可以完成签约

    申请条件:"银联在线支付"签约无需任何条件,个人也可以完成签约,只需要您购买我们开通好的企业支付宝,账户您自己管理,资金您自己操作(QQ3.0.5.7.1.0.4.3.9),或您也 ...

最新文章

  1. 全球机器学习领域顶尖的16家公司
  2. 1、创建数据表(CREATE TABLE语句)
  3. python将非0数视为false_python 面试题
  4. stylus之运算符(Operators)
  5. 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
  6. pydev工程linux运行,Linux平台下Python的安装及IDE开发环境搭建
  7. cocos2dX之一——安卓环境搭建
  8. Python3 encode中的unicode-escape和raw_unicode_escape
  9. 上传文件插件uploadify应用简单说明
  10. 五、登录页倒计时制作《仿淘票票系统前后端完全制作(除支付外)》
  11. python巡检网络设备_pyhton对网络设备的日常巡检
  12. 计算机信息安全法规和道德规范,信息安全法律法规与道德规范ppt
  13. MyBatis批量插入的五种方式
  14. C++运算符重载函数
  15. 涂鸦智能设备接入homeassistant
  16. Big-man的Bootstrap篇(一)
  17. qt找不到打印机_Qt之打印机总结
  18. 创建koa2项目步骤
  19. 企业IT项目开发之七宗罪(下篇)
  20. Apache Commons Email 怎样设置接收方发送已读回执?

热门文章

  1. php之box/spout 导入导出功能
  2. 偶尔看到的小诗:我想和你一起生活
  3. ERP系统的开发------(整理)
  4. python dll_python3.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  5. 东半球最先进的debug技巧
  6. 文件为只读模式,且无法更改权限
  7. 云时代的IT应用质量管理新动向
  8. 婚恋社交项目,寻找创业合伙人,坐标上海
  9. VK11\VK12\VK13 价格间隔拆分问题
  10. 生成带有logo的二维码