qq小程序支持微信支付
parent
c1499a40af
commit
33f3ff6c81
|
|
@ -106,7 +106,7 @@ class QQ
|
||||||
{
|
{
|
||||||
// 请求获取session_key
|
// 请求获取session_key
|
||||||
$url = 'https://api.q.qq.com/sns/jscode2session?appid='.$this->_appid.'&secret='.$this->_appsecret.'&js_code='.$authcode.'&grant_type=authorization_code';
|
$url = 'https://api.q.qq.com/sns/jscode2session?appid='.$this->_appid.'&secret='.$this->_appsecret.'&js_code='.$authcode.'&grant_type=authorization_code';
|
||||||
$result = json_decode(file_get_contents($url), true);
|
$result = $this->HttpRequestGet($url);
|
||||||
if(!empty($result['openid']))
|
if(!empty($result['openid']))
|
||||||
{
|
{
|
||||||
// 从缓存获取用户信息
|
// 从缓存获取用户信息
|
||||||
|
|
@ -118,5 +118,62 @@ class QQ
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公共获取access_token
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-08-26
|
||||||
|
* @desc description
|
||||||
|
*/
|
||||||
|
public function GetAccessToken()
|
||||||
|
{
|
||||||
|
// 缓存key
|
||||||
|
$key = $this->_appid.'_access_token';
|
||||||
|
$result = cache($key);
|
||||||
|
if(!empty($result))
|
||||||
|
{
|
||||||
|
if($result['expires_in'] > time())
|
||||||
|
{
|
||||||
|
return $result['access_token'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 网络请求
|
||||||
|
$url = 'https://api.q.qq.com/api/getToken?grant_type=client_credential&appid='.$this->_appid.'&secret='.$this->_appsecret;
|
||||||
|
$result = $this->HttpRequestGet($url);
|
||||||
|
if(!empty($result['access_token']))
|
||||||
|
{
|
||||||
|
// 缓存存储
|
||||||
|
$result['expires_in'] += time();
|
||||||
|
cache($key, $result);
|
||||||
|
return $result['access_token'];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [HttpRequestGet get请求]
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @datetime 2018-01-03T19:21:38+0800
|
||||||
|
* @param [string] $url [url地址]
|
||||||
|
* @return [array] [返回数据]
|
||||||
|
*/
|
||||||
|
public function HttpRequestGet($url)
|
||||||
|
{
|
||||||
|
$curl = curl_init();
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||||
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
|
|
||||||
|
$res = curl_exec($curl);
|
||||||
|
curl_close($curl);
|
||||||
|
return json_decode($res, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
@ -161,8 +161,11 @@ class Weixin
|
||||||
return DataReturn('支付缺少配置', -1);
|
return DataReturn('支付缺少配置', -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 平台
|
||||||
|
$client_type = ApplicationClientType();
|
||||||
|
|
||||||
// 微信中打开
|
// 微信中打开
|
||||||
if(ApplicationClientType() == 'h5' && IsWeixinEnv())
|
if($client_type == 'h5' && IsWeixinEnv())
|
||||||
{
|
{
|
||||||
exit(header('location:'.PluginsHomeUrl('weixinwebauthorization', 'pay', 'index', input())));
|
exit(header('location:'.PluginsHomeUrl('weixinwebauthorization', 'pay', 'index', input())));
|
||||||
}
|
}
|
||||||
|
|
@ -174,8 +177,26 @@ class Weixin
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QQ小程序使用微信支付
|
||||||
|
if($client_type == 'qq')
|
||||||
|
{
|
||||||
|
// 获取QQ access_token
|
||||||
|
$qq_appid = MyC('common_app_mini_qq_appid');
|
||||||
|
$qq_appsecret = MyC('common_app_mini_qq_appsecret');
|
||||||
|
$access_token = (new \base\QQ($qq_appid, $qq_appsecret))->GetAccessToken();
|
||||||
|
if($access_token === false)
|
||||||
|
{
|
||||||
|
return DataReturn('QQ凭证AccessToken获取失败', -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// QQ小程序代理下单地址
|
||||||
|
$request_url = 'https://api.q.qq.com/wxpay/unifiedorder?appid='.$qq_appid.'&access_token='.$access_token.'&real_notify_url='.urlencode($this->GetNotifyUrl($params));
|
||||||
|
} else {
|
||||||
|
$request_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
|
||||||
|
}
|
||||||
|
|
||||||
// 请求接口处理
|
// 请求接口处理
|
||||||
$result = $this->XmlToArray($this->HttpRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $this->ArrayToXml($ret['data'])));
|
$result = $this->XmlToArray($this->HttpRequest($request_url, $this->ArrayToXml($ret['data'])));
|
||||||
if(!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['prepay_id']))
|
if(!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['prepay_id']))
|
||||||
{
|
{
|
||||||
return $this->PayHandleReturn($ret['data'], $result, $params);
|
return $this->PayHandleReturn($ret['data'], $result, $params);
|
||||||
|
|
@ -352,7 +373,7 @@ class Weixin
|
||||||
$appid = ($client_type == 'weixin') ? $this->config['mini_appid'] : $this->config['appid'];
|
$appid = ($client_type == 'weixin') ? $this->config['mini_appid'] : $this->config['appid'];
|
||||||
|
|
||||||
// 异步地址处理
|
// 异步地址处理
|
||||||
$notify_url = (__MY_HTTP__ == 'https' && isset($this->config['agreement']) && $this->config['agreement'] == 1) ? 'http'.mb_substr($params['notify_url'], 5, null, 'utf-8') : $params['notify_url'];
|
$notify_url = ($client_type == 'qq') ? 'https://api.q.qq.com/wxpay/notify' : $this->GetNotifyUrl($params);
|
||||||
|
|
||||||
// 请求参数
|
// 请求参数
|
||||||
$data = [
|
$data = [
|
||||||
|
|
@ -373,6 +394,20 @@ class Weixin
|
||||||
return DataReturn('success', 0, $data);
|
return DataReturn('success', 0, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取异步通知地址
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-09-19
|
||||||
|
* @desc description
|
||||||
|
* @param [array] $params [输入参数]
|
||||||
|
*/
|
||||||
|
private function GetNotifyUrl($params)
|
||||||
|
{
|
||||||
|
return (__MY_HTTP__ == 'https' && isset($this->config['agreement']) && $this->config['agreement'] == 1) ? 'http'.mb_substr($params['notify_url'], 5, null, 'utf-8') : $params['notify_url'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取支付交易类型
|
* 获取支付交易类型
|
||||||
* @author Devil
|
* @author Devil
|
||||||
|
|
|
||||||
|
|
@ -235,8 +235,9 @@ Page({
|
||||||
switch (res.data.data.is_payment_type) {
|
switch (res.data.data.is_payment_type) {
|
||||||
// 正常线上支付
|
// 正常线上支付
|
||||||
case 0 :
|
case 0 :
|
||||||
|
var data = res.data.data;
|
||||||
my.tradePay({
|
my.tradePay({
|
||||||
tradeNO: res.data.data.data,
|
tradeNO: data.data,
|
||||||
success: res => {
|
success: res => {
|
||||||
if (res.resultCode == 9000) {
|
if (res.resultCode == 9000) {
|
||||||
// 数据设置
|
// 数据设置
|
||||||
|
|
|
||||||
|
|
@ -230,8 +230,9 @@ Page({
|
||||||
switch (res.data.data.is_payment_type) {
|
switch (res.data.data.is_payment_type) {
|
||||||
// 正常线上支付
|
// 正常线上支付
|
||||||
case 0:
|
case 0:
|
||||||
|
var data = res.data.data;
|
||||||
swan.requestPolymerPayment({
|
swan.requestPolymerPayment({
|
||||||
orderInfo: res.data.data.data,
|
orderInfo: data.data,
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
// 数据设置
|
// 数据设置
|
||||||
self.order_item_pay_success_handle(order_ids);
|
self.order_item_pay_success_handle(order_ids);
|
||||||
|
|
|
||||||
|
|
@ -75,9 +75,6 @@ Page({
|
||||||
|
|
||||||
// 初始化配置
|
// 初始化配置
|
||||||
this.init_config();
|
this.init_config();
|
||||||
|
|
||||||
// 显示分享菜单
|
|
||||||
app.show_share_menu();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 初始化配置
|
// 初始化配置
|
||||||
|
|
|
||||||
|
|
@ -220,23 +220,38 @@ Page({
|
||||||
success: res => {
|
success: res => {
|
||||||
qq.hideLoading();
|
qq.hideLoading();
|
||||||
if (res.data.code == 0) {
|
if (res.data.code == 0) {
|
||||||
var data = res.data.data.data;
|
var data = res.data.data;
|
||||||
qq.requestPayment({
|
// 是否微信支付
|
||||||
package: data,
|
if(data.payment.payment == 'Weixin') {
|
||||||
success: function (res) {
|
qq.requestWxPayment({
|
||||||
// 数据设置
|
url: data.data,
|
||||||
self.order_item_pay_success_handle(index);
|
referer: app.data.request_url,
|
||||||
|
success: function(res) {
|
||||||
// 跳转支付页面
|
app.alert({msg: '支付成功后、请不要重复支付、如果订单状态未成功请联系客服处理', is_show_cancel: 0});
|
||||||
qq.navigateTo({
|
self.get_data_list();
|
||||||
url: "/pages/paytips/paytips?code=9000&total_price=" +
|
},
|
||||||
self.data.data_list[index]['money']
|
fail: function (res) {
|
||||||
|
app.showToast('支付失败');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
} else {
|
||||||
fail: function (res) {
|
qq.requestPayment({
|
||||||
app.showToast('支付失败');
|
package: data.data,
|
||||||
}
|
success: function (res) {
|
||||||
});
|
// 数据设置
|
||||||
|
self.order_item_pay_success_handle(index);
|
||||||
|
|
||||||
|
// 跳转支付页面
|
||||||
|
qq.navigateTo({
|
||||||
|
url: "/pages/paytips/paytips?code=9000&total_price=" +
|
||||||
|
self.data.data_list[index]['money']
|
||||||
|
});
|
||||||
|
},
|
||||||
|
fail: function (res) {
|
||||||
|
app.showToast('支付失败');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
app.showToast(res.data.msg);
|
app.showToast(res.data.msg);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -233,19 +233,15 @@ Page({
|
||||||
switch (res.data.data.is_payment_type) {
|
switch (res.data.data.is_payment_type) {
|
||||||
// 正常线上支付
|
// 正常线上支付
|
||||||
case 0 :
|
case 0 :
|
||||||
|
var data = res.data.data;
|
||||||
// 是否微信支付
|
// 是否微信支付
|
||||||
if(res.data.data.payment.payment == 'Weixin') {
|
if(data.payment.payment == 'Weixin') {
|
||||||
qq.requestWxPayment({
|
qq.requestWxPayment({
|
||||||
url: res.data.data.data,
|
url: data.data,
|
||||||
referer: app.data.request_url,
|
referer: app.data.request_url,
|
||||||
success: function(res) {
|
success: function(res) {
|
||||||
// 数据设置
|
app.alert({msg: '支付成功后、请不要重复支付、如果订单状态未成功请联系客服处理', is_show_cancel: 0});
|
||||||
self.order_item_pay_success_handle(order_ids);
|
self.get_data_list();
|
||||||
|
|
||||||
// 跳转支付页面
|
|
||||||
qq.navigateTo({
|
|
||||||
url: "/pages/paytips/paytips?code=9000"
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
fail: function (res) {
|
fail: function (res) {
|
||||||
app.showToast('支付失败');
|
app.showToast('支付失败');
|
||||||
|
|
@ -253,7 +249,7 @@ Page({
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
qq.requestPayment({
|
qq.requestPayment({
|
||||||
package: res.data.data.data,
|
package: data.data,
|
||||||
success: function(res) {
|
success: function(res) {
|
||||||
// 数据设置
|
// 数据设置
|
||||||
self.order_item_pay_success_handle(order_ids);
|
self.order_item_pay_success_handle(order_ids);
|
||||||
|
|
|
||||||
|
|
@ -256,9 +256,10 @@ Page({
|
||||||
switch (res.data.data.is_payment_type) {
|
switch (res.data.data.is_payment_type) {
|
||||||
// 正常线上支付
|
// 正常线上支付
|
||||||
case 0:
|
case 0:
|
||||||
|
var data = res.data.data;
|
||||||
tt.pay({
|
tt.pay({
|
||||||
orderInfo: res.data.data.order_info,
|
orderInfo: data.order_info,
|
||||||
service: res.data.data.service,
|
service: data.service,
|
||||||
success(res) {
|
success(res) {
|
||||||
// if (res.code == 0) {
|
// if (res.code == 0) {
|
||||||
// // 数据设置
|
// // 数据设置
|
||||||
|
|
|
||||||
|
|
@ -233,12 +233,13 @@ Page({
|
||||||
switch (res.data.data.is_payment_type) {
|
switch (res.data.data.is_payment_type) {
|
||||||
// 正常线上支付
|
// 正常线上支付
|
||||||
case 0 :
|
case 0 :
|
||||||
|
var data = res.data.data;
|
||||||
wx.requestPayment({
|
wx.requestPayment({
|
||||||
timeStamp: res.data.data.data.timeStamp,
|
timeStamp: data.data.timeStamp,
|
||||||
nonceStr: res.data.data.data.nonceStr,
|
nonceStr: data.data.nonceStr,
|
||||||
package: res.data.data.data.package,
|
package: data.data.package,
|
||||||
signType: res.data.data.data.signType,
|
signType: data.data.signType,
|
||||||
paySign: res.data.data.data.paySign,
|
paySign: data.data.paySign,
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
// 数据设置
|
// 数据设置
|
||||||
self.order_item_pay_success_handle(order_ids);
|
self.order_item_pay_success_handle(order_ids);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue