APP端webview内微信H5支付解决方案
微信已经官方支持微信外部浏览器的H5微信支付。但是如果是从webview中调用H5微信支付的话。 ios平台上支付完成后会跳到外部的浏览器,而不是停留在app里面。
关于这个问题。 就需要我们在服务端模拟请求H5微信支付的中间环节,直接拿到支付地址。这样能避免ios webivew内微信支付成功后跳外部浏览器。
下面是服务端核心代码:
$input = new \WxPayUnifiedOrder(); $input->SetBody($i['product_name']); //商品描述 $input->SetAttach('abc'); //附加数据,在查询API和支付通知中原样返回 $input->SetOut_trade_no($i['qqes_order']); //要求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']) ){ throw new SdkException('微信统一下单失败'); } $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( $headers as $n => $v ) { $headerArr[] = $n . ':' . $v; } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_HTTPHEADER , $headerArr ); //构造IP curl_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){ echo curl_error($ch);die; } curl_close($ch); //匹配出支付链接 preg_match('/weixin(.*)"/', $outPut, $match); if( ! isset($match[1]) ){ throw new SdkException('无法获取支付链接:' . $outPut); } $clientPayUrl = 'weixin' . $match[1]; header('Location:' . $clientPayUrl);
服务端处理完成后,直接跳转从定向到支付最终url。 然后app端拦截这个url吊起微信支付即可。
相关推荐
liuxudong00 2020-11-19
wwzaqw 2020-11-11
lihaoxiang 2020-11-05
CrossingX 2020-11-04
xuegangic 2020-10-17
86417413 2020-11-25
83206733 2020-11-19
86276537 2020-11-19
83266337 2020-11-19
86256434 2020-11-17
zhouboxiao 2020-11-16
rise 2020-11-22
sssdssxss 2020-11-20
windle 2020-11-10
孙雪峰 2020-10-30
85477104 2020-11-17
xfcyhades 2020-11-20
cheidou 2020-11-19