后台加签时:安卓一直报 -1 ;iOS一直报 签名错误;
1.先找拼接参数是否正确
2.加密方式 是否 两次加密方式相同(统一下单 获取 预支付订单号时的加密方式/生成签名时加密方式)//此处sign加密,是从sdk拿出来的MD5 加密 但是 统一下单时 调取的为sdk的 config,所以 两者不匹配,导致一直报错。
$array = $this->wxPlaceOrder($total_amount,$body);
$data = [
'appid' => $array['appid'],
'partnerid' => $array['mch_id'],
'prepayid' => $array['prepay_id'],
'package' => 'Sign=WXPay',
'noncestr' => $array['nonce_str'],
'timestamp' => time()
];
$sign = $this->getSign($data);
$data['sign'] = $sign;
public function getSign($data)
{
$key = '商户key';
//签名步骤一:按字典序排序参数
ksort($data);
$string = $this->ToUrlParams($data);
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$key;
//签名步骤三:MD5加密或者HMAC-SHA256
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
public function ToUrlParams($data)
{
$buff = "";
foreach ($data as $k => $v)
{
if($k != "sign" && $v != "" && !is_array($v)){
$buff .= $k . "=" . $v . "&";
}
}
$buff = trim($buff, "&");
return $buff;
}
/**
* 微信统一下单
* @return [type] [description]
*/
public function wxPlaceOrder($total_fee='',$body='')
{
//②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody($body);
$input->SetOut_trade_no($this->out_trade_no);
$input->SetTotal_fee($total_fee);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url("");
$input->SetTrade_type("APP");
//配置APPID
$config = new \Config();
$order = \WxPayApi::unifiedOrder($config,$input);
return $order;
}
以上代码为 APP端获取 后台生成sign 进行APP端请求代码