提交 8b744bea 编写于 作者: G gongfuxiang

支付优化

上级 bcae35db
...@@ -272,5 +272,19 @@ class Order extends Common ...@@ -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));
}
} }
?> ?>
\ No newline at end of file
...@@ -271,7 +271,7 @@ class OrderService ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -359,9 +377,8 @@ class Weixin
onBridgeReady(); onBridgeReady();
} }
</script> </script>
</head> </head>
<body> </html>';
</html>');
} }
/** /**
...@@ -490,10 +507,12 @@ class Weixin ...@@ -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] : '';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册