您的位置:首页 > 移动开发 > 微信开发

[置顶] 实现APP支付QQ,微信,支付宝三方的后端服务------php实现支付宝APP支付

2018-02-11 17:10 1206 查看

前言:支付功能,可能目前大部分产品的设备都开始慢慢设计到,这里说到的支付有支付宝,微信,QQ等第三方支付

下面简单介绍下支付宝App支付后端的实现(这边是用php实现的):

一、 一些琐碎的申请和设置的方式就不说明了,支付宝开发者上有php服务端的Sdk,所以直接把SDK下载下来:



下载地址如下下载

二、 我这边用因为公司用的框架是tp3.2所以我把代码下载下来就放在vendor中

三、接下来就附上我的支付宝的支付工具类:

<?php

/**
* @encoding UTF-8
* @author wyb
* @datetime 2017/3/29
* @Description 支付宝支付控制器
*/

namespace Pay\Controller;

use Think\Controller;

/**
* @name
* Class AlipayAppPayController
*/
class AlipayAppPayController extends Controller {
//因为我们公司有多个产品设备所以这边根据所传的来源设备赋予设备ID
private $appidByTarget = [
'xxxx' => '201702234205510228',
'xxxx' => '201702234205510228',
'xxxx' => '201702234205510228',
'xxxx' => '201702234205510228',
'xxxx' => '201702234205510228',
'xxxx' => '201702234205510228',

];

/**
*这里需要说明下这里是我们产品所需要的部分逻辑,如果有需要也可学习使用
*
* 传入订单数据,进行整理、签名后,返回前端APP支付调起SDK信息
* @param array $order 待支付的订单信息,数组中的必要信息如下:
*  $order['id'] : 订单ID
*  $order['price'] : 实付金额,单位:元
*  $order['notifyUrl'] : 支付端异步通知地址,用于接受订单的支付结果
*  $order['target'] : 支付请求的来源,根据不同的来源,需要使用不同的支付账号信息
*  $order['title'] : 订单中文标题
*  $order['description'] : 订单介绍
*/
public function getCallSDKInfo($order){
//做简单的参数检查
if(!$order || !is_array($order) || !$order['id'] || !$order['price'] || !$order['notifyUrl'] || !$order['target']){
return false;
}
//整理待签名数据
$content = [
'body' => $order['description'], //商品介绍
'subject' => $order['title'], //标题
'out_trade_no' => $order['id'], //商家订单ID
'timeout_express' => '60m', //可支付有效时间,超过则无效,需要重新请求
'total_amount' => $order['price'], //价格
'seller_id' => '', //收款支付宝用户ID。 如果该值为空,则默认为商户签约账号对应的支付宝用户ID
'product_code' => 'QUICK_MSECURITY_PAY',
'goods_type' => '0' //商品类型
];
Vendor('aop.request.AlipayTradeAppPayRequest');
Vendor('aop.AopClient');
$request = new \AlipayTradeAppPayRequest();
$request->setBizContent(json_encode($content)); //请求对象,传入订单信息
$request->setNotifyUrl($order['notifyUrl']); //支付异步通知地址
$client = new \AopClient(); //实例化工具类
$client->appId = $this->appidByTarget[$order['target']];

return $client->sdkExecute($request);
}

/**
* 查询交易订单信息
* @return array
*/
public function enquiriesOrderInfo($data)
{
Vendor('aop.request.AlipayTradeQueryRequest');
Vendor('aop.AopClient');
$client = new \AopClient(); //实例化工具类
$client->appId = $this->appidByTarget[$data['target']];
$request = new \AlipayTradeQueryRequest ();
$content['out_trade_no'] =$data['out_trade_no'];
$request->setBizContent(json_encode($content));

$result = $client->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
return true;
} else {
return false;
}
}

/**
* 对异步通知的数据进行验签
* @param array $post 接收到的数据
*/
public function signCheck($post){
//进行验签
Vendor('aop.AopClient');
$client = new \AopClient();
return $client->rsaCheckV1($post, null, $post['sign_type']);
}
}


下面是实现调用这工具类的方式,根据你使用的场景,下面我写的是tp的控制器,如果你是自己的框架或者是laravel,yii,yaf,就按照你们定义的写

<?php
/**
*  简单的支付类
* @encoding UTF-8
* @author wyb
* @datetime 2017/3/29
* @Description 支付宝支付控制器
*/
class payController extents Controller
{
public function pay()
{
$order =[]//订单数据,这个校验我这边就不做处理了,若需对数据更严谨可以使用加签检验,或者带上token的提高安全性能

$alipay = new \Pay\Controller\AlipayAppPayController();
$order['notifyUrl'] = 'htt://xxxxx'; //这个是给支付宝回调的接口
$data = $alipay->getCallSDKInfo($order);//调用这个方法实现预订单

return $data;//并将支付宝返回的数据发送给前端,若正确前端就能调起支付宝app实现支付。若前端报错,根据前端的错误信息来解决
}

}


php后端实现微信宝APP支付,请点击这里:GO

php后端实现QQAPP支付,请点击这里:GO

注:这个就是我php后端实现支付的业务的相关代码,若有什么问题反馈请指出,谢谢,(这里并附上我自己的博客地址:blog.taobaoroom.cn,若有什么问题可根据博客上赋有的QQ群地址联系我哦!!)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: