微信小程序可以完成微信支付但没有回调,也没有完成订单状态

最近在使用禾匠商城小程序模块的时候,遇上了一个很头疼的问题,可以发起微信支付,也能够支付成功,但支付之后,订单状态还是显示未支付。

根据经验,这很大概率是微信支付回调没有设置好,先检查微信支付的3个产品有没有开通:《微信小程序调用支付JSAPI缺少参数: total_fee的解决办法

然后再看看微擎微赞系统有没有开启https功能:《微擎https与微信支付的坑

反复检查了一下,上面设置都没有什么问题,只能从代码方面找原因了,微信支付回调的统一接口:

禾匠商城小程序的目录太多,并且目录命名也比较任性,找到对应的文件很难,根据以前开发的经验,微信支付回调接口都有统一的必填参数:“notify_url”

直接全盘检索“notify_url”,找到对应的代码块:

$res = $this->wechat->pay->unifiedOrder([
‘body’ => $goods_names,
‘out_trade_no’ => $this->order->order_no,
‘total_fee’ => $this->order->pay_price * 100,
‘notify_url’ => \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . ‘/pay-notify.php’,
‘trade_type’ => ‘JSAPI’,
‘openid’ => $this->user->wechat_open_id,
]);

再进一步查看hostInfo函数的代码

public function getHostInfo()
{
if ($this->_hostInfo === null) {
$secure = $this->getIsSecureConnection();
$http = $secure ? ‘https’ : ‘http’;
if (isset($_SERVER[‘HTTP_HOST’])) {
$this->_hostInfo = $http . ‘://’ . $_SERVER[‘HTTP_HOST’];
} elseif (isset($_SERVER[‘SERVER_NAME’])) {
$this->_hostInfo = $http . ‘://’ . $_SERVER[‘SERVER_NAME’];
$port = $secure ? $this->getSecurePort() : $this->getPort();
if (($port !== 80 && !$secure) || ($port !== 443 && $secure)) {
$this->_hostInfo .= ‘:’ . $port;
}
}
}

return $this->_hostInfo;
}

找到原因了:

[reply]https默认端口是443,微信支付异步通知只支持绑定80端口的域名,需要把https 替换为 http就可以了[/reply]

修改完成后刷新微擎、禾匠商城小程序的缓存,重启一下IIS,再试一下微信支付,果然可以了。

人已赞赏
二次开发雕技术

微信小程序调用支付JSAPI缺少参数: total_fee的解决办法

2018-5-19 23:31:38

雕技术

微信模版消息TM00335找不到的解决办法

2018-5-27 13:24:57

免责声明本文中提到的资源均来自于互联网,仅供个人学习交流,若您喜欢本文可附上原文链接随意转载。
版权人申诉:我要申诉
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索