PHP直播源码在支付充值方面,对支付宝的依赖还蛮大的,伴随支付宝支付的使用,在PHP直播源码中加入支付宝支付和回调变得越来越平常,下面就给各位分析一下,如何实现PHP直播源码支付回调的使用。 一、支付宝的接入及配置 1、登录支付宝开放平台(https://open.alipay.com/platform/home.htm),进入开放平台,点击右上角,密钥管理—>mapi网关产品密钥—>RSA(SHA1)秘钥设置;
【注意:如果之前已经设置过的话,请确认是否有APP项目在使用该密钥】 2、使用秘钥生成工具,根据自身需求生成成对的公私钥; 私钥 (下载rsa签名验签工具)
二、支付宝回调使用 PHP直播源码在接收到用户的充值请求后,会自行调起支付宝支付进行支付,可将支付宝相关配置参数放到后台进行填写,方便更改替换。php的web端下载支付宝对应的sdk进行引入使用。
1、PHP直播源码在后台需要添加的支付宝配置文件内容
//合作身份者id,以2088开头的16位纯数字
$alipay_config['partner'] = '根据实际情况填写';
//商户的私钥(后缀是.pen)文件相对路径
$alipay_config['private_key_path'] = dirname(__FILE__).'/key/rsa_private_key.pem';
//支付宝公钥(后缀是.pen)文件相对路径
$alipay_config['ali_public_key_path']= dirname(__FILE__).'/key/alipay_public_key.pem';
//签名方式
$alipay_config['sign_type'] = strtoupper('RSA');
//字符编码格式 目前支持 gbk 或 utf-8
$alipay_config['input_charset']= strtolower('utf-8');
//ca证书路径地址,用于curl中ssl校验
//请保证cacert.pem文件在当前文件夹目录中
$alipay_config['cacert'] = dirname(__FILE__).'/cacert.pem';
//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
$alipay_config['transport'] = 'http';
2、回调,
//支付宝 回调
public function notify_ali() {
$configpri=getConfigPri();
require_once(CMF_ROOT."sdk/alipay_app/alipay.config.php");
//合作身份者id
$alipay_config['partner'] = $configpri['aliapp_partner'];
require_once(CMF_ROOT."sdk/alipay_app/lib/alipay_core.function.php");
require_once(CMF_ROOT."sdk/alipay_app/lib/alipay_rsa.function.php");
require_once(CMF_ROOT."sdk/alipay_app/lib/alipay_notify.class.php");
引入需要的文件及配资信息,根据实际情况填写
//计算得出通知验证结果
$alipayNotify = new \AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
$this->logali("ali_data:".json_encode($_POST));
if($verify_result) {//验证成功
//获取商户订单号、支付宝交易号、交易状态等【根据自己的实际需求 获取需要的参数】
$out_trade_no = $_POST['out_trade_no'];
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//判断该笔订单是否在商户网站中已经做过处理
//如果有做过处理,根据实际业务来编写程序
}else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据实际业务来编写程序
}
}else {
$this->logali("验证失败");
//验证失败echo "fail";
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
3、初始化AlipayNotify及获取验证结果的业务说明 (1)验证结果
function verifyNotify(){
if(empty($_POST)) {//判断POST来的数组是否为空
return false;
}else {
//生成签名结果
$isSign = $this->getSignVeryfy($_POST, $_POST["sign"]);
//获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息)
$responseTxt = 'false';
if(!empty($_POST["notify_id"])){
$responseTxt= $this->getResponse($_POST["notify_id"]);}
//注意:$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关,isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关
if (preg_match("/true$/i",$responseTxt) && $isSign) {
return true;
} else {
return false;
}
}
(2)获取签名结果
function getSignVeryfy($para_temp, $sign) {
//除去待签名参数数组中的空值和签名参数
$para_filter = paraFilter($para_temp);
//对待签名参数数组排序
$para_sort = argSort($para_filter);
//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = createLinkstring($para_sort);
$isSgin = false;
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "RSA" :
$isSgin = rsaVerify($prestr, trim($this->alipay_config['ali_public_key_path']), $sign);
break;
default :
$isSgin = false;
}
return $isSgin;
(3)服务器ATN结果
function getResponse($notify_id) {
$transport = strtolower(trim($this->alipay_config['transport']));
$partner = trim($this->alipay_config['partner']);
$veryfy_url = '';
if($transport == 'https') {
$veryfy_url = $this->https_verify_url;
}
else {
$veryfy_url = $this->http_verify_url;
}
$veryfy_url = $veryfy_url."partner=" . $partner . "¬ify_id=" . $notify_id;
$responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']);
return $responseTxt;
}
本文对PHP直播源码使用支付宝充值时,支付宝的配置接入及回调的使用进行简单介绍,如有类似需求可进行简单参照,如有其他问题或想进行PHP直播源码开发,可联系官网客服。 声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任
|