最近两周一直在做网站的微信支付,期间遇到好多个问题,而最坑的问题,应该就是一个exit引发的坑案。
其实上周微信支付就已经调通了,在测试环境测试,没有什么大的问题,完美。但是提交到内测环境之后,便一直报错undefied index:prepay_id.
我的action是这么写的:
<span style="white-space:pre"> </span>header('content-type:text/html;charset=utf-8');
$wxconfig = \Yii::$app->params['weixinpay'];
$request = Yii::$app->request;
<span style="white-space:pre"> </span>$param = $request->get();
$jsApi = new tradepay\weixin\JsApiPub($wxconfig);
$openid = 0;
if (!isset($_GET['code']))
{
//触发微信返回code码
$url = $jsApi->createOauthUrlForCode( urlencode( $wxconfig['JS_API_CALL_URL'] .'?' .http_build_query( $param ) ) );
Header("Location: $url");
<span style="white-space:pre"> </span><span style="color:#ff0000;">exit();(问题便是出在这里)</span>
}else
{
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
}
.....
<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="white-space:pre"> </span>$unifiedOrder->setParameter("notify_url",\Yii::$app ->params['apiAddress'].$wxconfig['NOTIFY_URL']);//异步通知回调地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
try{
$prepay_id = $unifiedOrder->getPrepayId();
}catch( \Exception $e ){
$this->redirect_message('f', $e ->getMessage(), 3, Yii::$app->request->baseUrl.'/order/index');
}
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
return $this->render('proc',['jsApiParameters'=>$jsApiParameters]);</span>
上面第一步是为了获取code的,因为他是跳转过去的,所以想当然的以为header跳转了,就没事了,可是PHP代码是会继续执行下面的代码的,至于为什么在测试环境没有报这个错,或许是因为测试地址跳转比较快吧。也就是因为PHP代码会继续执行,导致往下执行的时候,没有获取到微信生成的预支付订单编号,undefied index:prepay_id这个BUG也就出来了。细节决定成败啊,想做一个好的程序员,还要更加细心才行啊。希望能帮助到需要的同学吧。