最近两周一直在做网站的微信支付,期间遇到好多个问题,而最坑的问题,应该就是一个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也就出来了。细节决定成败啊,想做一个好的程序员,还要更加细心才行啊。希望能帮助到需要的同学吧。