资讯专栏INFORMATION COLUMN

APP端webview内微信H5支付解决方案

Kyxy / 2129人阅读

摘要:微信已经官方支持微信外部浏览器的微信支付。但是如果是从中调用微信支付的话。就需要我们在服务端模拟请求微信支付的中间环节,直接拿到支付地址。这样能避免内微信支付成功后跳外部浏览器。然后端拦截这个吊起微信支付即可。

微信已经官方支持微信外部浏览器的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吊起微信支付即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26247.html

相关文章

  • 开源中国专访:Chameleon原理首发,其它跨多统一框架都是假的?

    摘要:中国互联网络信息中心发布的中国互联网络发展状况统计报告显示,截至年月,我国网民规模达亿人,微信月活亿支付宝月活亿百度月活亿另一方面,中国手机占智能手机整体的比例超过,月活约亿。在年末正式发布了面向未来的跨端的。 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的? 原创: 嘉宾-张楠 开源中国 以往我们说某一功能跨多端,往往是指在诸如 PC、移动等不同类型的设备之...

    GraphQuery 评论0 收藏0
  • 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybr

    摘要:开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化,以支持更多实用的功能。基于以上两点问题,似乎只有多线程能够解决。 Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化,以支持更多实用的功能。另外IOS的Hybrid App也完成了移植,Android...

    CrazyCodes 评论0 收藏0
  • H5/web app/第三方网页 微信授权登录 调研

    摘要:微信登录用户可使用微信帐号快速登录你的网站,同一用户使用微信登录你的不同应用和公众帐号,会对应同一个,以便进行不同业务间的帐号统一微信授权登录可分为扫码登录一般用于网页微信开放平台跳转授权登录第三方使用微信开放平台微信内置浏览器内登录一 微信登录: 用户可使用微信帐号快速登录你的网站,同一用户使用微信登录你的不同应用和公众帐号,会对应同一个UnionID,以便进行不同业务间的帐号统一 ...

    keithxiaoy 评论0 收藏0
  • 原生App与javascript交互之JSBridge接口原理、设计与实现

    摘要:相关参考中与之间相互调用的实现实现了与相同的机制的对象注入漏洞解决方案存在的意义 前期调研 调研对象:支付宝,微信,云之家 调研文档:Android中JS与Java的极简交互库 SimpleJavaJsBridge 设计需求 阅读类型的业务功能页面需要由前端H5实现,需要做到服务端可控; 页面界面更改减少重新发布新版本的频率; 功能页面部分原型需求无法实现,需要原生功能支持; 对未来...

    Lyux 评论0 收藏0
  • 原生App与javascript交互之JSBridge接口原理、设计与实现

    摘要:相关参考中与之间相互调用的实现实现了与相同的机制的对象注入漏洞解决方案存在的意义 前期调研 调研对象:支付宝,微信,云之家 调研文档:Android中JS与Java的极简交互库 SimpleJavaJsBridge 设计需求 阅读类型的业务功能页面需要由前端H5实现,需要做到服务端可控; 页面界面更改减少重新发布新版本的频率; 功能页面部分原型需求无法实现,需要原生功能支持; 对未来...

    caikeal 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<