<?php

namespace app\common\payment;

use Payment\Common\PayException;

class AppUtil
{
    /**
     * 将参数数组签名
     */

    //RSA签名
    public static function Sign(array $array)
    {
        ksort($array);
        $bufSignSrc = AppUtil::ToUrlParams($array);
        $private_key = AppConfig::PRIVATEKEY;
        $private_key = chunk_split($private_key, 64, "\n");
        $key = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($private_key) . "-----END RSA PRIVATE KEY-----";
        //   echo $key;
        if (openssl_sign($bufSignSrc, $signature, $key)) {
            $sign = base64_encode($signature);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        } else {
            throw new PayException('签名错误');
        }

        return $sign;
    }


    public static function ToUrlParams(array $array)
    {
        $buff = "";
        foreach ($array as $k => $v) {
            if ($v != "" && !is_array($v)) {
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }

    /**
     * 校验签名
     * @param array 参数
     * @param unknown_type appkey
     */


    public static function ValidSign(array $array)
    {
        $sign = $array['sign'];
        unset($array['sign']);
        ksort($array);
        $bufSignSrc = AppUtil::ToUrlParams($array);
        $public_key = AppConfig::PUBLICKEY;
        $public_key = chunk_split($public_key, 64, "\n");
        $key = "-----BEGIN PUBLIC KEY-----\n$public_key-----END PUBLIC KEY-----\n";
        $result = openssl_verify($bufSignSrc, base64_decode($sign), $key);
        return $result;
    }


}

?>