本文将介绍如何快速通过PHP类库来集成、整合支付宝来实现充值功能.如果你的系统想要扩充积分、账户余额等功能,那么就要选择一个第三方支付系统来充值.
支付宝集成时,需要三大步:
①.、通过表单提交信息,系统整合信息,提交信息到支付宝;
支付宝PHP类
PHP 类alipay_notify,主要功能是付款过程中服务器通知处理.
PHP 类alipay_service,根据支付宝外部服务接口生成支付宝地址.
下面主要主要讲解通过支付宝的PHP类来实现整合.
PHP支付宝集成
第一步,建立提交充值的基本信息:
zhifubao-chongzhi PHP支付宝集成 建立提交充值的基本信息
第二步,验证用户提交的金额正确,通过表单验证后,通过支付宝alipay_service类生成支付宝链接,然后跳转到支付宝链接.
function index() {
$total = intval($_POST['total']);
if (!$total) {
$total = 1;
}
$pay_bank = trim($_POST['pay_bank']);
$account = $_POST['_account'];
$base_path = 'http://'.$_SERVER['HTTP_HOST'].base_path();
$order_id = date('YmdHis', time()); //时间值作为唯一的订单ID号
$subject = $body = 'LixiPHP充值'.$total.'元';
$out_trade_no = date('YmdHis', time()).'-'.$account-student['sid'];
//签约支付宝账号或卖家支付宝帐户
$seller_email = 'seller@alipay.com';
$transport = 'https';//字符编码格式
$parameter = array(
"service" = "create_direct_pay_by_user", //交易类型
"partner" = $partner, //合作商户号
"return_url" = $base_path.'alipay/return', //同步返回
"notify_url" = $base_path.'alipay/notify', //异步返回
"subject" = $subject, //商品名称,必填
"body" = $subject, //商品描述,必填
"out_trade_no" = $out_trade_no, //商品外部交易号,必填(保证唯一性)
"price" = $total, //商品单价,必填(价格不能为0)
"payment_type" = "1", //默认为1,不需要修改
"quantity" = "1", //商品数量,必填
"paymethod" = 'directPay',
"defaultbank" = $pay_bank,
"logistics_fee" ='0.00◆, //物流配送费用
"logistics_payment" ='BUYER_PAY', //物流费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
"logistics_type" ='EXPRESS', //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
//"receive _mobile" = ", //收货人手机
"show_url" = $base_path, //商品相关网站
"seller_email" = $seller_email, //卖家邮箱,必填
);
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_service($parameter, $security_code, $sign_type);
$link = $alipay-create_url();
header("Location: ".$link);
用户跳转到支付宝支付界面后,默认的支付银行是在提交表单前选择的网上银行,选择支付宝的话就是使用支付宝余额支付.然后就是等待用户支付了.用户完成支付后,请会发生下面的几个步骤,当然如果用户放弃支付的话,就没有后面的处理了.
第三步,用户进行支付后,支付宝后台通知系统处理.系统处理页面主要是根据生成支付宝链接是使用的notify_url来决定的.它处理完成后,成功返回success,失败返回fail,如果支付宝收到的是fail,那么支付宝还会在隔1小时,1天,1周等周期再次通知服务器处理,这里的周期需求向支付宝询问.如果支付宝收到的是success,注意支付宝好像在一个月后要发送一次TRADE_FINISHED表示交易完成,这个一定不要再给用户加一次充值了.
function alipay_notify() {
$transport = 'https';
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay-notify_verify();
//支付宝 Notice verify
if($verify_result) {
//认证合格
//获取支付宝的反馈参数
//获取支付宝传递过来的订单号
$order_id = $_POST['out_trade_no'];
//获取支付宝传递过来的总价格
$total_fee = $_POST['total_fee'];
//拆分订单号为订单和学员ID
$txn_id = explode('-', $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
if($_POST['trade_status'] == 'TRADE_SUCCESS') {
//这里放入你自定义代码,比如根据不同的trade_status进行不同操作
mysql_query("UPDATE {student} set balance = balance◆%d where sid = %d", (int) $total_fee, $sid);
mysql_query("INSERT INTO {payment_receipts} (sid, order_id, amount, received) VALUES (%d, '%s', %f, %d)", $sid, $real_orderid, (int) $total_fee, time());
echo "success";
else {
echo "fail";
第四步,用户完成支付后,支付宝前台跳转到系统返回地址.这个页面其实可以只做一个非常简单页面,不用做任何验证.但是为了安全建议也做一下返回验证.但是最后不要在返回页面做数据库操作.
function alipay_return() {
$verify_result = $alipay-return_verify();
$order_id = $_GET['out_trade_no']; //获取订单号
$total_fee = (int) $_GET['total_fee']; //获取总价格
$student = mysql_query("SELECT uid, balance FROM {student} WHERE sid = %d", $sid);
$output .= 'p您目前的余额'.$student-balance.'元./p';
$output .= l('查看记录', 'user/'.$student-uid.'/depositlogs');
return $output;
$output .= 'p您的交易信息是无效的,如果你使用的是已有的返回信息的话,那么交易已经成立,你可以查看我的订单历史.br如果你是黑客的话,俺是守法的好公民,希望你能饶了我这个小店.';
$output .= '/ppa href="/"返回首页/a/p';
如果用户是恶意修改网址参数,将会看到:
callback return failed 如果用户是恶意修改网址参数
如果用户正常通过支付宝自动跳转回来的,将会看到:
callback return success 如果用户正常通过支付宝自动跳转回来的
好的,赶快将以上方法和代码应用到你的积分、账户余额系统把!
第一步:登陆PP的BIZ网站
第七步:根据自己的需求申请API凭证或API证书
希望我的回答有帮到您
右键重启,看看颜色变化,有的版本黄色、红色等代表有问题,纯白色才是一切正常启动;
①AppServ (推荐,简洁精简)
XAMPP是一款具有中文说明的功能全面的集成环境,XAMPP并不仅仅针对Windows,而是一个适用于Linux、Windows、Mac OS X 和Solaris 的易于安装的Apache 发行版.软件包中包含Apache 服务器、MySQL、SQLite、PHP、Perl、FileZilla FTP Server、Tomcat等等.默认安装开放了所有功能,安全性有问题,需要对以下安全问题进行设定.
MySQL 管理员(root)未设置密码.
MySQL 服务器可以通过网络访问.
PhpMyAdmin 可以通过网络访问.
样例可以通过网络访问.
Mercury 邮件服务器和 FileZilla FTP 服务器的用户是公开的.
主页
WampServer - WampServe集成了Apache、MySQL、PHP、phpmyadmin,支持Apache的mod_rewrite,PHP扩展、Apache模块只需要在菜单"开启/关闭"上点点就搞定,省去了修改配置文件的麻烦.
该程序包集成最新的Apache◆PHP◆MySQL◆phpMyAdmin◆ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等.都说到这里了大家应该明白学习PHP只需一个包.
对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事;对老手来说也是一件烦琐的事.所以呢无论你是新手还是老手,该程序包都是一个不错的选择.
中的启动按钮,即可自动进行相关设置,将Apache和MySQL安装为系统服务并启动.APMServ集合了Apache稳定安全的优点,并拥有跟IIS一样便捷的图形管理界面,同
成.
①.、注意事项:APMServ程序所在路径不能含有汉字和空格.
附加组件:
先回答你的第一个问题.
网上有人说适合,也有人说不适合的,不能说他们说的完全错误,但也不能说是完全正确的,具体问题具体分析,这种事情要看情况.
php集成环境的本质是啥?网上那些php集成环境和我们自己安装的有啥区别呢?
其实没多大差别,所谓的php集成环境只不过通过软件替我们完成了一些比较麻烦的操作罢了,本质上没有任何区别!那些程序开发者开发php集成环境软件的时候,都要把apache与mysql等组件集成在软件里面,而这些apache等组件和自己安装的是没啥区别的,不过不建议使用精简版的集成环境,可以使用完全版的php集成环境.
我打个比方,软件的安装版和绿化版其实没毛线区别,有的集成环境集成组件后重新打包成安装版罢了,而有的集成环境集成组件后将其绿化成绿色版集成环境,不过绿化后的php集成环境确实方便,插上U盘,插其他电脑就可以直接运行网站,用软件能省略了很多繁琐步骤,确实很便捷.php集成环境是一种工具,工具本身就是为了方便,当然你也可以自行安装,比较费事罢了,集成环境功能多,方便使用.
关于你的第二个问题"哪款集成环境在服务器上使用比较好?
既然集成环境适合在服务器上运行,那是不是就可以直接用在服务器上?看你的需求了,同时也要看是哪种集成环境.
选择哪种php集成环境做服务器环境主要有以下几点要考虑
①.、大部分php集成环境集成的版本都不是最新(这条无关紧要,因为现在很多网站都不是用最新的,旧版本程序不一定适合新的啊!)
解决:可以选择那些集成了新组件的集成环境,或者能自定义设置版本的php集成环境
解决:你可以选择一些集成了完整版组件的集成环境.
解决:目前有一些php集成环境还是能完全自己修改和自定义配置的,不会被软件自动生死所限制.
具体用哪个,你可以根据自己的需求选择,毕竟每个集成环境都各具特点,按需选择.
phpwamp和PHPCUSTOM这两款集成环境很适合在服务器运行,集成官方完全组件,无阉割无精简,是完全版的,而且支持完全的配置自定义,php版本等自定义,还能同时运行多版本,自带重启任务.
PHPCUSTOM自带重启任务,能定时重启服务器,定时重启网站服务等.
纯绿色很方便,所集成的组件是完全的,适合测试,也比较适合服务器
累死了,纯手工打字啊,采纳我给我赚点分吧.
准备工作
APP支付接口:alipay.trade.app.pay
登录蚂蚁金服开放平台 -- 创建应用 -- 添加App支付功能.具体查看官方文档
支付接口调用原理
①.、APP支付系统架构
APP支付系统架构图
数据校验原理
应用公钥(商户自身的RSA公钥):支付宝使用该公钥验证该交易是商户发起.
支付宝公钥(支付宝的RSA公钥):商户使用该公钥验证该结果是支付宝返回的.
系统交互流程图
在集成App支付能力时,建议实现如下支付流程,创建订单并支付,根据返回的结果确定支付状态,并进行相应的异常处理,其过程如下图所示.
支付场景具体实现流程
代码实现
步骤1:商户APP端请求商户服务器接口,提交订单数据.
官方接口文档:
——代码如下:
vendor('alipay.aop.AopClient');
vendor('alipay.aop.request.AlipayTradeAppPayRequest');
//实例化支付接口
$aop = new \AopClient();
$aop-gatewayUrl = ""; //支付宝网关
$aop-appId = "应用ID,填写你的APPID";
$aop-rsaPrivateKey = "商户私钥,您的原始格式RSA私钥()";
$aop-alipayrsaPublicKey = "支付宝公钥";
$aop-apiVersion = '1.0';
$aop-format = "json";
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$appRequest = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = json_encode([
'body' = '余额充值', //订单描述
'subject' = '充值', //订单标题
'total_amount' = '0.01', //订单总金额
'product_code' = 'QUICK_MSECURITY_PAY', //固定值
]);
$appRequest-setNotifyUrl($url); //设置异步通知地址
$appRequest-setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop-sdkExecute($appRequest);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
// 如果最后有问题可以尝试把htmlspecialchars方法去掉,直接返回$response
说明:sdkExecute()方法,作用生成签名,详细步骤如下:
①.)将请求参数的键按字典排序,然后按照key=valuekey=value方式拼接,得到未签名原始字符串如下:
若用户支付成功,支付宝会同步给商户APP端返回一个支付结果.相应地,支付宝也会通过异步通知给商户服务器端返回一个支付结果.
注意:由于同步通知和异步通知都可以作为支付完成的凭证,且异步通知支付宝一定会确保发送给商户服务端.为了简化集成流程,商户可以将同步结果仅仅作为一个支付结束的通知(忽略执行校验),实际支付是否成功,完全依赖服务端异步通知.
注意点:
①.)必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;
$aop = new AopClient;
$aop-alipayrsaPublicKey = '请填写支付宝公钥,一行字符串';
if($flag){
//校验通知数据的正确性
$out_trade_no = $_POST['out_trade_no']; //商户订单号
$trade_no = $_POST['trade_no']; //支付宝交易号
$trade_status = $_POST['trade_status']; //交易状态trade_status
$total_amount = $_POST[''total_amount']; //订单的实际金额
$app_id = $_POST['app_id'];
if($app_id!=$this-config['app_id']) exit('fail'); //验证app_id是否为该商户本身
//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功.
if($trade_status != 'TRADE_FINISHED' $trade_status != 'TRADE_SUCCESS')
exit('fail');
//校验订单的正确性
if(!empty($out_trade_no)){
//1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
//校验成功后在response中返回success,校验失败返回failure
echo"fail"; //验证签名失败