zoukankan      html  css  js  c++  java
  • ThinkPHP3.2 整合支付宝RSA加密方式

    RSA核心加密验证算法

    <?php
    /**
     * RSA签名
     * @param $data 待签名数据
     * @param $private_key 商户私钥字符串
     * return 签名结果
     */
    function rsaSign($data, $private_key) {
        //以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
        $private_key=str_replace("-----BEGIN RSA PRIVATE KEY-----","",$private_key);
        $private_key=str_replace("-----END RSA PRIVATE KEY-----","",$private_key);
        $private_key=str_replace("
    ","",$private_key);
    
        $private_key="-----BEGIN RSA PRIVATE KEY-----".PHP_EOL .wordwrap($private_key, 64, "
    ", true). PHP_EOL."-----END RSA PRIVATE KEY-----";
    
        $res=openssl_get_privatekey($private_key);
    
        if($res)
        {
            openssl_sign($data, $sign,$res);
        }
        else {
            return false;
        }
        openssl_free_key($res);
        //base64编码
        $sign = base64_encode($sign);
        return $sign;
    }
    
    /**
     * RSA验签
     * @param $data 待签名数据
     * @param $alipay_public_key 支付宝的公钥字符串
     * @param $sign 要校对的的签名结果
     * return 验证结果
     */
    function rsaVerify($data, $alipay_public_key, $sign)  {
        //以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
        $alipay_public_key=str_replace("-----BEGIN PUBLIC KEY-----","",$alipay_public_key);
        $alipay_public_key=str_replace("-----END PUBLIC KEY-----","",$alipay_public_key);
        $alipay_public_key=str_replace("
    ","",$alipay_public_key);
    
        $alipay_public_key='-----BEGIN PUBLIC KEY-----'.PHP_EOL.wordwrap($alipay_public_key, 64, "
    ", true) .PHP_EOL.'-----END PUBLIC KEY-----';
        $res=openssl_get_publickey($alipay_public_key);
        if($res)
        {
            $result = (bool)openssl_verify($data, base64_decode($sign), $res);
        }
        else {
           return false;
        }
        openssl_free_key($res);    
        return $result;
    }
    
    ?>

    异步回调修改如下,即可完成MD5 和 RSA的验证

    /**
         * 获取返回时的签名验证结果
         * @param $para_temp 通知返回来的参数数组
         * @param $sign 返回的签名结果
         * @return 签名验证结果
         */
        function getSignVeryfy($para_temp, $sign) {
            //除去待签名参数数组中的空值和签名参数
            $para_filter = paraFilter($para_temp);
            
            //对待签名参数数组排序
            $para_sort = argSort($para_filter);
            
            //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
            $prestr = createLinkstring($para_sort);
            
            $isSgin = false;
            switch (strtoupper(trim($this->alipay_config['sign_type']))) {
                case "MD5" :
                    $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
                    break;
                case "RSA" :
                    $isSgin = rsaVerify($prestr, trim($this->alipay_config['alipay_public_key']), $sign);
                    break;
                default :
                    $isSgin = false;
            }
            
            return $isSgin;
        }

    添加配置信息:

    'alipay'     =>   array(
            'partner'     =>  '',
            'seller_id'   =>  '',
            'key'         =>  '',
            'notify_url'   =>  '',
            'return_url'   =>  '',
            'sign_type'    =>  strtoupper('MD5'),
            'input_charset'=>  strtolower('utf-8'),
            'transport'    =>  'http',
            'payment_type' =>  1,
            'service'      =>  'create_direct_pay_by_user',
            'account'      =>  '',
            'privatekey'   =>  '',        //    私钥
        'alipay_public_key'    => '', // 支付宝公钥
     ),

    因移动支付只有RSA加密,没有MD5 加密方法,所以可根据实际应用场景进行调整!

    以上仅为使用过程中记录的!

  • 相关阅读:
    EFCore 中使用覆盖查询(ForSqlServerInclude方法)来优化查询速度
    Asp.Net Core中使用FTP读取大文件并使用SqlBulkCopy实现大批量插入SQL SERVER数据库
    EFCore 2.2 报错 Data is Null. This method or property cannot be called on Null values
    在Asp.Net Core中集成Refit
    EFCore通过Include关联清单不存在时返回值为默认值的方式
    工作中常用英语单词
    参数的 in out in/out 修饰
    C# 的属性的写法和赋值
    raspberry pi 4b 常见的一些配置信息
    树莓派4B 更新wiringPi库到2.52的方法的wiringPi库2.5.2版本wiringpi-latest.deb下载
  • 原文地址:https://www.cnblogs.com/kevinws/p/6813569.html
Copyright © 2011-2022 走看看