微信APP统一支付二签方法
微信APP支付二签方法
/**
* 2 二次签名返回给APP
*/
$signParam = array(
'appid' => $result['appid'],
'partnerid' => $result['mch_id'],
'prepayid' => $result['prepay_id'],
'package' => 'Sign=WXPay',
'noncestr' => $wxpay->createNoncestr(),
'timestamp' => time(), //系统时间戳,精确到秒
);
$signParam['sign'] = $wxpay->getSign($signParam, $API_KEY);
//转JSON并返回
echo json_encode($signParam);
/**
* 作用:产生随机字符串,不长于32位
*/
public function createNoncestr($length = 32)
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
/**
* 作用:生成签名(MD5形式)
*/
public function getSign($Obj, $api_key)
{
foreach ($Obj as $k => $v) {
$Parameters[$k] = $v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//签名步骤二:在string后加入KEY
$String = $String . "&key=" . $api_key;
//签名步骤三:MD5加密
$String = md5($String);
//签名步骤四:所有字符转为大写
$result_ = strtoupper($String);
return $result_;
}