qq小程序支持微信支付

feat/task1-c-wallet
devil 2020-09-19 23:21:26 +08:00
parent c1499a40af
commit 33f3ff6c81
9 changed files with 146 additions and 42 deletions

View File

@ -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);
}
} }
?> ?>

View File

@ -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

View File

@ -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) {
// 数据设置 // 数据设置

View File

@ -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);

View File

@ -75,9 +75,6 @@ Page({
// 初始化配置 // 初始化配置
this.init_config(); this.init_config();
// 显示分享菜单
app.show_share_menu();
}, },
// 初始化配置 // 初始化配置

View File

@ -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);
} }

View File

@ -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);

View File

@ -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) {
// // 数据设置 // // 数据设置

View File

@ -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);