支付优化
parent
bcae35db5b
commit
8b744beae0
|
|
@ -272,5 +272,19 @@ class Order extends Common
|
||||||
return ApiService::ApiDataReturn(OrderService::OrderDelete($params));
|
return ApiService::ApiDataReturn(OrderService::OrderDelete($params));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 支付状态校验
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2019-01-08
|
||||||
|
* @desc description
|
||||||
|
*/
|
||||||
|
public function PayCheck()
|
||||||
|
{
|
||||||
|
$params = $this->data_post;
|
||||||
|
$params['user'] = $this->user;
|
||||||
|
return ApiService::ApiDataReturn(OrderService::OrderPayCheck($params));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
@ -271,7 +271,7 @@ class OrderService
|
||||||
'call_back_url' => $call_back_url,
|
'call_back_url' => $call_back_url,
|
||||||
'redirect_url' => $redirect_url,
|
'redirect_url' => $redirect_url,
|
||||||
'site_name' => MyC('home_site_name', 'ShopXO', true),
|
'site_name' => MyC('home_site_name', 'ShopXO', true),
|
||||||
'ajax_url' => MyUrl('index/order/paycheck'),
|
'check_url' => MyUrl('index/order/paycheck'),
|
||||||
];
|
];
|
||||||
|
|
||||||
// 发起支付处理钩子
|
// 发起支付处理钩子
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,6 @@ class Alipay
|
||||||
// app,头条小程序
|
// app,头条小程序
|
||||||
case 'ios' :
|
case 'ios' :
|
||||||
case 'android' :
|
case 'android' :
|
||||||
case 'toutiao' :
|
|
||||||
$ret = $this->PayApp($params);
|
$ret = $this->PayApp($params);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -246,17 +245,19 @@ class Alipay
|
||||||
$parameter['sign'] = $this->MyRsaSign($this->GetSignContent($parameter));
|
$parameter['sign'] = $this->MyRsaSign($this->GetSignContent($parameter));
|
||||||
|
|
||||||
// 接口则直接返回
|
// 接口则直接返回
|
||||||
|
$html = $this->BuildRequestForm($parameter);
|
||||||
if(APPLICATION == 'app')
|
if(APPLICATION == 'app')
|
||||||
{
|
{
|
||||||
$result = [
|
$result = [
|
||||||
'data' => $parameter,
|
'data' => $parameter,
|
||||||
|
'html' => $html,
|
||||||
'url' => 'https://openapi.alipay.com/gateway.do?charset=utf-8',
|
'url' => 'https://openapi.alipay.com/gateway.do?charset=utf-8',
|
||||||
];
|
];
|
||||||
return DataReturn('success', 0, $result);
|
return DataReturn('success', 0, $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// web端输出执行form表单post提交
|
// web端输出执行form表单post提交
|
||||||
exit($this->BuildRequestForm($parameter));
|
exit($html);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -293,9 +294,21 @@ class Alipay
|
||||||
|
|
||||||
// 生成签名参数+签名
|
// 生成签名参数+签名
|
||||||
$parameter['sign'] = $this->MyRsaSign($this->GetSignContent($parameter));
|
$parameter['sign'] = $this->MyRsaSign($this->GetSignContent($parameter));
|
||||||
|
|
||||||
// 输出执行form表单post提交
|
// 接口则直接返回
|
||||||
exit($this->BuildRequestForm($parameter));
|
$html = $this->BuildRequestForm($parameter);
|
||||||
|
if(APPLICATION == 'app')
|
||||||
|
{
|
||||||
|
$result = [
|
||||||
|
'data' => $parameter,
|
||||||
|
'html' => $html,
|
||||||
|
'url' => 'https://openapi.alipay.com/gateway.do?charset=utf-8',
|
||||||
|
];
|
||||||
|
return DataReturn('success', 0, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// web端输出执行form表单post提交
|
||||||
|
exit($html);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -504,9 +517,7 @@ class Alipay
|
||||||
|
|
||||||
//submit按钮控件请不要含有name属性
|
//submit按钮控件请不要含有name属性
|
||||||
$html .= "<input type='submit' value='ok' style='display:none;'></form>";
|
$html .= "<input type='submit' value='ok' style='display:none;'></form>";
|
||||||
|
|
||||||
$html .= "<script>document.forms['alipaysubmit'].submit();</script>";
|
$html .= "<script>document.forms['alipaysubmit'].submit();</script>";
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class AlipayFace
|
||||||
'name' => '支付宝', // 插件名称
|
'name' => '支付宝', // 插件名称
|
||||||
'version' => '1.0.0', // 插件版本
|
'version' => '1.0.0', // 插件版本
|
||||||
'apply_version' => '不限', // 适用系统版本描述
|
'apply_version' => '不限', // 适用系统版本描述
|
||||||
'apply_terminal'=> ['pc', 'h5'], // 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
|
'apply_terminal'=> ['pc', 'h5', 'weixin'], // 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
|
||||||
'desc' => '支付宝当面付、适用web端,用户主动扫码支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>', // 插件描述(支持html)
|
'desc' => '支付宝当面付、适用web端,用户主动扫码支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>', // 插件描述(支持html)
|
||||||
'author' => 'Devil', // 开发者
|
'author' => 'Devil', // 开发者
|
||||||
'author_url' => 'http://shopxo.net/', // 开发者主页
|
'author_url' => 'http://shopxo.net/', // 开发者主页
|
||||||
|
|
@ -171,19 +171,31 @@ class AlipayFace
|
||||||
// 状态
|
// 状态
|
||||||
if(isset($result[$key]['code']) && $result[$key]['code'] == 10000 && !empty($result[$key]['qr_code']))
|
if(isset($result[$key]['code']) && $result[$key]['code'] == 10000 && !empty($result[$key]['qr_code']))
|
||||||
{
|
{
|
||||||
if(empty($params['ajax_url']))
|
if(empty($params['check_url']))
|
||||||
{
|
{
|
||||||
return DataReturn('支付状态校验地址不能为空', -50);
|
return DataReturn('支付状态校验地址不能为空', -50);
|
||||||
}
|
}
|
||||||
$pay_params = [
|
if(APPLICATION == 'app')
|
||||||
'url' => urlencode(base64_encode($result[$key]['qr_code'])),
|
{
|
||||||
'order_no' => $params['order_no'],
|
$data = [
|
||||||
'name' => urlencode('支付宝支付'),
|
'pay_url' => $result[$key]['qr_code'],
|
||||||
'msg' => urlencode('打开支付宝APP扫一扫进行支付'),
|
'qrcode_url' => MyUrl('index/qrcode/index', ['content'=>urlencode(base64_encode($result[$key]['qr_code']))]),
|
||||||
'ajax_url' => urlencode(base64_encode($params['ajax_url'])),
|
'order_no' => $params['order_no'],
|
||||||
];
|
'name' => '支付宝支付',
|
||||||
$url = MyUrl('index/pay/qrcode', $pay_params);
|
'msg' => '打开支付宝APP扫一扫进行支付',
|
||||||
return DataReturn('success', 0, $url);
|
'check_url' => $params['check_url'],
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$pay_params = [
|
||||||
|
'url' => urlencode(base64_encode($result[$key]['qr_code'])),
|
||||||
|
'order_no' => $params['order_no'],
|
||||||
|
'name' => urlencode('支付宝支付'),
|
||||||
|
'msg' => urlencode('打开支付宝APP扫一扫进行支付'),
|
||||||
|
'check_url' => urlencode(base64_encode($params['check_url'])),
|
||||||
|
];
|
||||||
|
$data = MyUrl('index/pay/qrcode', $pay_params);
|
||||||
|
}
|
||||||
|
return DataReturn('success', 0, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 直接返回支付信息
|
// 直接返回支付信息
|
||||||
|
|
|
||||||
|
|
@ -227,23 +227,35 @@ class QQ
|
||||||
// 手机模式下直接返回微信的支付url地址,打开支付(缺点是支付后会直接关闭站点)
|
// 手机模式下直接返回微信的支付url地址,打开支付(缺点是支付后会直接关闭站点)
|
||||||
// QQ支付本身没有提供H5支付方案,这种方式也可以直接支付(缺点是支付后不能回调到原来浏览器)
|
// QQ支付本身没有提供H5支付方案,这种方式也可以直接支付(缺点是支付后不能回调到原来浏览器)
|
||||||
// 公众号后续再采用公众号的方式支付,体验会更好一些,只是可以不关闭站点
|
// 公众号后续再采用公众号的方式支付,体验会更好一些,只是可以不关闭站点
|
||||||
if(ApplicationClientType() == 'h5')
|
if(APPLICATION == 'web' && IsMobile())
|
||||||
{
|
{
|
||||||
$result = DataReturn('success', 0, $data['code_url']);
|
$result = DataReturn('success', 0, $data['code_url']);
|
||||||
} else {
|
} else {
|
||||||
if(empty($params['ajax_url']))
|
if(empty($params['check_url']))
|
||||||
{
|
{
|
||||||
return DataReturn('支付状态校验地址不能为空', -50);
|
return DataReturn('支付状态校验地址不能为空', -50);
|
||||||
}
|
}
|
||||||
$pay_params = [
|
if(APPLICATION == 'app')
|
||||||
'url' => urlencode(base64_encode($data['code_url'])),
|
{
|
||||||
'order_no' => $params['order_no'],
|
$data = [
|
||||||
'name' => urlencode('QQ支付'),
|
'pay_url' => $data['code_url'],
|
||||||
'msg' => urlencode('打开QQAPP扫一扫进行支付'),
|
'qrcode_url' => MyUrl('index/qrcode/index', ['content'=>urlencode(base64_encode($data['code_url']))]),
|
||||||
'ajax_url' => urlencode(base64_encode($params['ajax_url'])),
|
'order_no' => $params['order_no'],
|
||||||
];
|
'name' => 'QQ支付',
|
||||||
$url = MyUrl('index/pay/qrcode', $pay_params);
|
'msg' => '打开QQAPP扫一扫进行支付',
|
||||||
$result = DataReturn('success', 0, $url);
|
'check_url' => $params['check_url'],
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$pay_params = [
|
||||||
|
'url' => urlencode(base64_encode($data['code_url'])),
|
||||||
|
'order_no' => $params['order_no'],
|
||||||
|
'name' => urlencode('QQ支付'),
|
||||||
|
'msg' => urlencode('打开QQAPP扫一扫进行支付'),
|
||||||
|
'check_url' => urlencode(base64_encode($params['check_url'])),
|
||||||
|
];
|
||||||
|
$data = MyUrl('index/pay/qrcode', $pay_params);
|
||||||
|
}
|
||||||
|
$result = DataReturn('success', 0, $data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -249,19 +249,30 @@ class Weixin
|
||||||
{
|
{
|
||||||
// web支付
|
// web支付
|
||||||
case 'NATIVE' :
|
case 'NATIVE' :
|
||||||
if(empty($params['ajax_url']))
|
if(empty($params['check_url']))
|
||||||
{
|
{
|
||||||
return DataReturn('支付状态校验地址不能为空', -50);
|
return DataReturn('支付状态校验地址不能为空', -50);
|
||||||
}
|
}
|
||||||
$pay_params = [
|
if(APPLICATION == 'app')
|
||||||
'url' => urlencode(base64_encode($data['code_url'])),
|
{
|
||||||
'order_no' => $params['order_no'],
|
$data = [
|
||||||
'name' => urlencode('微信支付'),
|
'qrcode_url' => MyUrl('index/qrcode/index', ['content'=>urlencode(base64_encode($data['code_url']))]),
|
||||||
'msg' => urlencode('打开微信APP扫一扫进行支付'),
|
'order_no' => $params['order_no'],
|
||||||
'ajax_url' => urlencode(base64_encode($params['ajax_url'])),
|
'name' => '微信支付',
|
||||||
];
|
'msg' => '打开微信APP扫一扫进行支付',
|
||||||
$url = MyUrl('index/pay/qrcode', $pay_params);
|
'check_url' => $params['check_url'],
|
||||||
$result = DataReturn('success', 0, $url);
|
];
|
||||||
|
} else {
|
||||||
|
$pay_params = [
|
||||||
|
'url' => urlencode(base64_encode($data['code_url'])),
|
||||||
|
'order_no' => $params['order_no'],
|
||||||
|
'name' => urlencode('微信支付'),
|
||||||
|
'msg' => urlencode('打开微信APP扫一扫进行支付'),
|
||||||
|
'check_url' => urlencode(base64_encode($params['check_url'])),
|
||||||
|
];
|
||||||
|
$data = MyUrl('index/pay/qrcode', $pay_params);
|
||||||
|
}
|
||||||
|
$result = DataReturn('success', 0, $data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// h5支付
|
// h5支付
|
||||||
|
|
@ -277,19 +288,20 @@ class Weixin
|
||||||
|
|
||||||
// 微信中/小程序支付
|
// 微信中/小程序支付
|
||||||
case 'JSAPI' :
|
case 'JSAPI' :
|
||||||
$pay_data = array(
|
$pay_data = [
|
||||||
'appId' => $pay_params['appid'],
|
'appId' => $pay_params['appid'],
|
||||||
'package' => 'prepay_id='.$data['prepay_id'],
|
'package' => 'prepay_id='.$data['prepay_id'],
|
||||||
'nonceStr' => md5(time().rand()),
|
'nonceStr' => md5(time().rand()),
|
||||||
'signType' => $pay_params['sign_type'],
|
'signType' => $pay_params['sign_type'],
|
||||||
'timeStamp' => (string) time(),
|
'timeStamp' => (string) time(),
|
||||||
);
|
];
|
||||||
$pay_data['paySign'] = $this->GetSign($pay_data);
|
$pay_data['paySign'] = $this->GetSign($pay_data);
|
||||||
|
|
||||||
// 微信中
|
// 微信中
|
||||||
if(APPLICATION == 'web' && IsWeixinEnv())
|
if(APPLICATION == 'web' && IsWeixinEnv())
|
||||||
{
|
{
|
||||||
$this->PayHtml($pay_data, $redirect_url);
|
$html = $this->PayHtml($pay_data, $redirect_url);
|
||||||
|
die($pay_data['html']);
|
||||||
} else {
|
} else {
|
||||||
$result = DataReturn('success', 0, $pay_data);
|
$result = DataReturn('success', 0, $pay_data);
|
||||||
}
|
}
|
||||||
|
|
@ -324,10 +336,16 @@ class Weixin
|
||||||
private function PayHtml($pay_data, $redirect_url)
|
private function PayHtml($pay_data, $redirect_url)
|
||||||
{
|
{
|
||||||
// 支付代码
|
// 支付代码
|
||||||
exit('<html>
|
return '<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
|
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
|
||||||
<title>微信安全支付</title>
|
<title>微信安全支付</title>
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1">
|
||||||
|
<body style="text-align:center;padding-top:10%;">
|
||||||
|
<p style="color:#999;">正在支付中...</p>
|
||||||
|
<p style="color:#f00;margin-top:20px;">请不要关闭页面!</p>
|
||||||
|
</body>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function onBridgeReady()
|
function onBridgeReady()
|
||||||
{
|
{
|
||||||
|
|
@ -359,9 +377,8 @@ class Weixin
|
||||||
onBridgeReady();
|
onBridgeReady();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
</html>';
|
||||||
</html>');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -490,10 +507,12 @@ class Weixin
|
||||||
'android' => 'APP',
|
'android' => 'APP',
|
||||||
];
|
];
|
||||||
|
|
||||||
// 微信中打开
|
// h5
|
||||||
if($client_type == 'h5' && IsWeixinEnv())
|
if($client_type == 'h5')
|
||||||
{
|
{
|
||||||
$type_all['h5'] = $type_all['weixin'];
|
// 微信中打开
|
||||||
|
// h5则使用NATIVE二维码的方式
|
||||||
|
$type_all['h5'] = IsWeixinEnv() ? $type_all['weixin'] : $type_all['pc'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return isset($type_all[$client_type]) ? $type_all[$client_type] : '';
|
return isset($type_all[$client_type]) ? $type_all[$client_type] : '';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue