微信支付 返回状态码为 -1 的问题
一般客户端应用签名跟微信开发平台提供的签名一致的话那么这个问题就是出在服务端了,服务端签名的时候需要注意下面一些细节。
1、签名参数如下所示,键都是小写字母加下划线的形式!!!!!
2、签名参数键的顺序需升序排列(或者最后使用ksort()方法排序下)!!!!!
3、签名参数的数量如下所示,不可随意添加其他参数!!!!
1、先进行统一下单签名,为了获取到prepay_id
//这里参数大小写一定注意,参数键都是小写字母加下划线的形式
$parameters = array(
'appid' => $appId, //appid,这里是“微信开放平台”获取的APPID
'body' => 'APP支付测试', //商品描述
'mch_id' => $mchId, //商户号,这里是“微信商户平台”获取的商户
'nonce_str' => $nonceStr, //随机生成的字符串
'notify_url' => 'http://www.weixin.qq.com/wxpay/pay.php',//通知地址
'out_trade_no' => $orderId, //自己平台定义的订单号码
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],//终端IP
'total_fee' => floatval($totalGoodsPrice * 100),//总金额 单位 分
'trade_type' => 'APP' //交易类型
);
将上面的参数进行签名获取到sign,然后再将该签名的值添加到上述参数中。即伪代码如下:
$parameters['sign'] = sign($parameters);
然后再将该 prepayId(具体操作方法请查看微信官方文档)。
2、第二次签名,返回给客户端
$parameters2 = array(
'appid' => $appId, //“微信开放平台”获取的APPID
'noncestr' => $nonceStr, //随机生成的字符串
'package' => 'Sign=WXPay', //暂定为“Sign=WXPay”
'partnerid' => $mchId, //“微信商户平台”获取的商户
'prepayid' => $prepayId,
'timestamp' => '' . time() . '',//时间戳
);
将上述的 parameters2 的参数中:即伪代码如下:
$parameters2['sign'] = sign($parameters2);
然后将该参数$parameters2返回给客户端即可。