笔者最近对接微信服务商,没有用sdk,硬接。。
需要注意的是,header中的序列号不要用错了
<?php
namespace xxxxx;
use app\api\ErrDesc;
use app\models\aliyun\oss\Oss;
use app\models\Help;
use Yii;
/**
* 微信服务商(微信基础接口)
*
*/
class WxCommercial
{
private static $merchant_id = ''; //发起请求的商户(包括直连商户、服务商或渠道商)的商户号
private static $serial_no = '';//服务商商户API证书序列号
private static $api_v3 = '';//apiv3秘钥
/**
* 获取私有key字符串 重新格式化 为保证任何key都可以识别
*/
public static function get_private_key()
{
$path = Yii::$app->getBasePath() . '/xxxx/apiclient_key.pem';
return file_get_contents($path);
}
/**
*
* 获取公共key字符串
*/
public static function get_public_key()
{
$path = Yii::$app->getBasePath() . '/xxxx/apiclient_cert.pem';
return file_get_contents($path);
}
/**
*
* 获取微信支付证书
*/
public static function get_wxcert_key()
{
$path = Yii::$app->getBasePath() . '/xxxxx/wxcert.pem';
return file_get_contents($path);
}
/**
* 功能:敏感信息加密, 使用微信支付平台公钥加密
*
* @param $str
* @return string
* @author Jiachi
*/
public static function encryptOAEP($str)
{
//$str是待加密字符串
$public_key = self::get_wxcert_key();
$encrypted = '';
if (openssl_public_encrypt($str, $encrypted, $public_key, OPENSSL_PKCS1_OAEP_PADDING)) {
//base64编码
$sign = base64_encode($encrypted);
} else {
return false;
}
return $sign;
}
/**
* 功能:解密敏感数据
*
* @param $str
* @author Jiachi
*/
public static function decryptOAEP($str)
{
//$str是密文
$private_key = self::get_private_key();
$encrypted = '';
if (openssl_private_decrypt(base64_decode($str), $encrypted, $private_key, OPENSSL_PKCS1_OAEP_PADDING)) {
return $encrypted;
} else {
return false;
}
}
/**
* 功能:验证回调数据和签名
* @param $data
* @param $signature
* @return bool
* @author Jiachi
*/
public static function dec