php微信开发回调域名,微信jsapi支付网页授权回调域名限制问题

问题描述:

微信的jsapi支付有一个必传参数openid,需要使用微信网页授权接口拿到,但目前微信最多允许设置两个回调域名。见官方说明:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3

解决方案:

设置回调中心转发。

解决步骤:

假设你的平台下有5个域名需要jsapi支付,a.com,b.com,c.com,d.com.e.com,其中a.com,b.com在公众号后台设置了回调域名,

我们在a.com下建立回调中心。

1 修改c.com,d.com,e.com三个域名下获取openid的代码,把回调地址改成a.com下的回调中心的地址:

以官方的sdk下的demo为例子,修改 Wxpay.jsApiPay.php,

public function GetOpenid($order_no = '')

{

//通过code获得openid

if (!isset($_GET['code'])){

//redirectUrl设置为a后台回调中心的的地址,并标记order_no和platform(最终需要跳转回哪个平台)

$redirectUrl = "https://a.com/WeixinOpenidCenter/index?order_no=".$order_no."&platform=c";

$baseUrl = urlencode($redirectUrl);

$url = $this->_CreateOauthUrlForCode($baseUrl);

return array('type'=>'url','url'=>$url);

} else {

//获取code码,以获取openid

$code = $_GET['code'];

$openid = $this->GetOpenidFromMp($code);

return $openid;

}

}

2 在a.com下建立WeixinOpenidCenter控制器,代码如下:

class WeixinOpenidCenterController extends Controller{

/**

* openid公共回调中心

* @return [type]

*/

public function index(){

//引入官方包的代码...

require_once APP_PATH."/sdk路径/WeChat/lib/WxPay.Api.php";

require_once APP_PATH."/sdk路径/WeChat/example/WxPay.JsApiPay.php";

require_once APP_PATH."/sdk路径/WeChat/example/WxPay.Config.php";

require_once APP_PATH."/sdk路径/WeChat/example/log.php";

require_once APP_PATH."/sdk路径t/WeChat/config.php";

$logHandler= new \CLogFileHandler(APP_PATH."/sdk路径/WeChat/logs/".date('Y-m-d').'.log');

$log = \Log::Init($logHandler, 15);

//①、获取用户openid

try{

$tools = new \JsApiPay();

$openId = $tools->GetOpenid(); // 当前位置处于回调中心,微信会携带着code重定向到当前地址,所以GetOpenid方法会直接拿到opendid.

if($openId){

//跳转到相应后台

$platform = trim($_GET['platform']); // 记录需要把openid回传给哪个域名

$order_no = trim($_GET['order_no']); // 记录目标域名平台下的订单号

if(!$openId && !$order_no){

$this->error('无效的订单');

die;

}

//携带openid和订单号回传给目标域名

if($platform == 'c'){

$url = "https://c.com/Recharge/jsapiPay?openid=".$openId."&order_no={$order_no}";

}elseif ($platform == 'd') {

$url = "https://d.com/Recharge/jsapiPay?openid=".$openId."&order_no={$order_no}";

}elseif ($platform == 'e') {

$url = "https://e.com/Recharge/jsapiPay?openid=".$openId."&order_no={$order_no}";

}

header("Location:{$url}");

die;

}

} catch(Exception $e) {

\Log::DEBUG(json_encode($e));

}

}

}

3 目标域名下的Recharge/jsapiPay接收get参数里的openid和订单号,正常发起jsapi支付。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值