PayUtils.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace common\pay\trustpay;
  3. class PayUtils
  4. {
  5. /** 加密函数
  6. * @param array $data
  7. * @return string
  8. */
  9. public static function makeSign($data, $privateKey)
  10. {
  11. $MerchantID = $data['MerchantID']; //支付平台商户号
  12. $OrderNo = $data['OrderNo']; //平台订单号码
  13. $ProductName = $data['ProductName']; //商品名称
  14. $Amount = $data['Amount']; //总金额
  15. $CallBackUrl = $data['CallBackUrl']; //回调地址
  16. $str = "{$MerchantID}"."{$OrderNo}"."{$ProductName}"."{$Amount}"."{$CallBackUrl}";
  17. file_put_contents('tp_str_befor.txt',$str);
  18. $rsa = openssl_pkey_get_private(file_get_contents($privateKey));
  19. if (empty($rsa))
  20. {
  21. echo "private key resource identifier False!";
  22. return False;
  23. }
  24. openssl_sign($str, $sign, $rsa);
  25. $sign = base64_encode($sign);
  26. file_put_contents('tp_str_after.txt',$sign);
  27. return $sign;
  28. }
  29. /** 解密函数
  30. * @param array $data
  31. * @param $pubCert
  32. * @return bool|int
  33. */
  34. public static function verify($data, $pubCert)
  35. {
  36. // 签名
  37. if (!isset($data['Sign']) || trim($data['Sign']) === '') {
  38. return false;
  39. }
  40. $sign = $data['Sign']; //获得数据中的sign
  41. unset($data['Sign']); //删除数据中的字段
  42. $MerchantID = $data['MerchantID']; //支付平台商户号
  43. $OrderNo = $data['OrderNo']; //平台订单号码
  44. $MerchantOrderNo = $data['MerchantOrderNo']; //商品名称
  45. $Status = $data['Status']; //回调地址
  46. $Amount = sprintf("%.2f",$data['Amount']); //总金额
  47. $temp = "{$MerchantID}"."{$OrderNo}"."{$MerchantOrderNo}"."{$Status}"."{$Amount}"; //加密字符串
  48. $pubKey = openssl_pkey_get_public(file_get_contents($pubCert));
  49. return (bool)openssl_verify($temp, base64_decode($sign), $pubKey);
  50. }
  51. }