微信已正式支持微信外置浏览器的H5微信支付。但是如果从webview调用H5微信支付。ios平台支付完成后,会跳转到外部浏览器,不会停留在app内。关于这个问题。我们需要在服务器端模拟请求H5微信支付的中间环节,直接获取支付地址。这样可以防止在ioswebivew中微信支付成功后外部浏览器跳转。以下是服务端的核心代码:$input=new\WxPayUnifiedOrder();$input->SetBody($i['product_name']);//商品描述$input->SetAttach('abc');//附加数据,返回$input->SetOut_trade_no($i['qqes_order'])在查询API和支付通知中的原样;//要求32个字符以内,只能是数字,大小写字母_-|*@$input->SetTotal_fee($i['fee']*100);//订单总金额,单位为美分$input->SetNotify_url($this->notifyUrl);$input->SetTrade_type("MWEB");//网页版$order=\WxPayApi::unifiedOrder($input);if(!isset($order['mweb_url'])){thrownewSdkException('微信统一下单失败');}$payUrl=$order['mweb_url'];$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$payUrl);if(strpos($payUrl,'https')===0){curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);}$headers['CLIENT-IP']=$_SERVER['REMOTE_ADDR'];$headers['X-FORWARDED-FOR']=$_SERVER['REMOTE_ADDR'];$headerArr=array();foreach($headersas$n=>$v){$headerArr[]=$n.':'。$v;}curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArr);//构造IPcurl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);//连接超时时间(秒)//微信上填写的微信授权域curl_setopt($ch,CURLOPT_REFERER,'http://www.example.com');curl_setopt($ch,CURLOPT_TIMEOUT,5);//执行超时(秒)$outPut=curl_exec($ch);if($outPut===false){echocurl_error($ch);die;}curl_close($ch);//匹配支付链接preg_match('/weixin(.*)"/',$outPut,$match);if(!isset($match[1])){thrownewSdkException('获取支付链接失败:'.$outPut);}$clientPayUrl='weixin'.$match[1];header('Location:'.$clientPayUrl);支付最终的url然后app端拦截这个url挂起微信支付。
