PHP集成支付宝快速实现充值功能

2023-05-16

http://blog.lixiphp.com/php-alipay-fast-chongzhi/#axzz2wy4huhBm


本文将介绍如何快速通过PHP类库来集成、整合支付宝来实现充值功能。如果你的系统想要扩充积分、账户余额等功能,那么就要选择一个第三方支付系统来充值。

支付宝集成时,需要三大步:

1、通过表单提交信息,系统整合信息,提交信息到支付宝;

2、用户进行支付后,支付宝后台通知系统处理;

3、支付宝后台通知完成后,支付宝前台跳转到系统返回地址;

支付宝PHP类

  • PHP 类alipay_notify,主要功能是付款过程中服务器通知处理。
  • PHP 类alipay_service,根据支付宝外部服务接口生成支付宝地址。

我把这2个类,集中到一个文件alipay.class.inc中,点击这里查看并下载PHP支付宝类源码。

下面主要主要讲解通过支付宝的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']; 
  //合作身份者ID,以2088开头的16位纯数字 
  $partner = ’20887015**9*7**’; 
  //安全检验码,以数字和字母组成的32位字符 
  $security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′; 
  //签约支付宝账号或卖家支付宝帐户 
  $seller_email = ‘seller@alipay.com’; 
  $_input_charset = "UTF-8"; 
  $sign_type = "MD5"; //签名方式 
  $transport = ‘https’;//字符编码格式 
  $parameter = array( 
    "service"        => "create_direct_pay_by_user",  //交易类型 
    "partner"        => $partner,         //合作商户号 
    "return_url"     => $base_path.’alipay/return’,      //同步返回 
    "notify_url"     => $base_path.’alipay/notify’,      //异步返回 
    "_input_charset" => ‘UTF-8′,  //字符集,默认为GBK 
    "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() { 
  $out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid']; 
  //合作身份者ID,以2088开头的16位纯数字 
  $partner = ’20887015**9*7**’; 
  //安全检验码,以数字和字母组成的32位字符 
  $security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′; 
  //签约支付宝账号或卖家支付宝帐户 
  $seller_email = ‘seller@alipay.com’; 
  $sign_type = "MD5"; 
  $_input_charset = ‘UTF-8′; 
  $transport = ‘https’; 
  require("../libraries/payment/alipay.class.inc"); 
  $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"; 
    } 
  } 
  else { 
    echo "fail"; 
  } 
}

第四步,用户完成支付后,支付宝前台跳转到系统返回地址。这个页面其实可以只做一个非常简单页面,不用做任何验证。但是为了安全建议也做一下返回验证。但是最后不要在返回页面做数据库操作。

function alipay_return() { 
  $out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid']; 
  //合作身份者ID,以2088开头的16位纯数字 
  $partner = ’20887015**9*7**’; 
  //安全检验码,以数字和字母组成的32位字符 
  $security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′; 
  //签约支付宝账号或卖家支付宝帐户 
  $seller_email = ‘seller@alipay.com’; 
  $sign_type = "MD5"; 
  $_input_charset = ‘UTF-8′; 
  $transport = ‘https’; 
  require("../libraries/payment/alipay.class.inc"); 
  $alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport); 
  $verify_result = $alipay->return_verify(); 
  $order_id    = $_GET['out_trade_no'];   //获取订单号 
  $total_fee  = (int) $_GET['total_fee'];      //获取总价格 
  $txn_id = explode(‘-’, $order_id); 
  $real_orderid = $txn_id[0]; //get the real order 
  $sid = $txn_id[1]; 
  //认证合格 
  if($verify_result) { 
    $output = ‘<h2>恭喜您,学员ID’.$sid.’充值’.$total_fee.’元成功!</h2>’; 
    $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; 
  } 
  else { 
    $output = ‘<h2>你的订单支付过程出现故障!</h2>’; 
    $output .= ‘<p>您的交易信息是无效的,如果你使用的是已有的返回信息的话,那么交易已经成立,你可以查看我的订单历史。<br>如果你是黑客的话,俺是守法的好公民,希望你能饶了我这个小店。’; 
    $output .= ‘</p><p><a href="/">返回首页</a></p>’; 
    return $output; 
  } 
}

如果用户是恶意修改网址参数,将会看到:

callback return failed  如果用户是恶意修改网址参数

如果用户正常通过支付宝自动跳转回来的,将会看到:

callback return success 如果用户正常通过支付宝自动跳转回来的

好的,赶快将以上方法和代码应用到你的积分、账户余额系统把!

  • 上一篇文章: PHP类CFPropertyList操作Plist文件
  • 下一篇文章: Codec2i – PHP开源众筹系统Kickstarter源码
除非注明,文章均为 LixiPHP原创,转载请注明本文地址: http://blog.lixiphp.com/php-alipay-fast-chongzhi/


查看更多: PHP集成支付宝快速实现充值功能 | LixiPHP - 专注于建设高品质网站! http://blog.lixiphp.com/php-alipay-fast-chongzhi/#ixzz2wy56UqHs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP集成支付宝快速实现充值功能 的相关文章

  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • https 重定向 laravel .htaccess 之后删除 /public

    我有一个 Laravel 页面部署在共享主机中 当我强制 http 请求重定向到 https 时 url 包含 public 我的根 htaccess 是 RewriteEngine on RewriteCond REQUEST URI p
  • 控制器 HMVC 内的 CodeIgniter 负载控制器

    我在用着http github com philsturgeon codeigniter template http github com philsturgeon codeigniter template 对于模板 我尝试将其他控制器视图
  • PHP 7.2 计数错误

    警告 count 参数必须是数组或对象 实现 Countable in 我在以下行中收到上述错误 if 0 gt count this gt xprop 有人可以帮助我理解这一点吗 我对 PHP 还很陌生 问题显然是 this gt xpr
  • 显示带有 id 的内部连接的名称[重复]

    这个问题在这里已经有答案了 我有这个查询 select from countrysegments inner join country on countrysegments country id country id inner join
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 统计数据库中的注册用户数

    我想反映在我的网站上注册的人数 只有我拥有的代码不起作用 它让我知道它不可能 转换为字符串 另外 当我将其设置为在 HTML 中调用的函数时 我收到 connection 未定义的错误 require once connect php sq
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • 将我的 Laravel 连接到外部数据库

    如何将 Laravel 连接到外部数据库 示例 我的本地计算机上有一个 Laravel 它在 xampp 上运行 我希望它连接到云服务器数据库 打开 env文件并编辑它 只需设置正确的外部数据库凭据 DB CONNECTION mysql
  • 如何通过开始索引和结束索引提取子字符串?

    str HelloWorld sub substr str 3 5 echo sub prints loWor 我知道 substr 采用第一个参数 第二个参数是开始索引 而第三个参数是要提取的子字符串长度 我需要的是通过提取子字符串起始索
  • Monolog:通过邮件发送错误日志会导致每个发送的错误都会收到一封额外的邮件

    对于通过邮件发送的每个错误日志 我们都会收到另一封额外的电子邮件 其中包含 2 行 smtp 调试日志消息 新创建的 symfony 演示 symfony new demo 配置独白以通过邮件发送错误消息 如docs https symfo
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • Yii2 组件将数据传递给 __construct

    我有一个库 我想将其用作组件 在配置文件中我这样设置 components gt superLib gt class gt SuperLib construct gt first second Maybe Yii 2 have proper
  • 如何使用 PHP 将字符串按大写字母分解?

    我有一个字符串 CamelCaseString 我想对大写字母进行explode split 或一些更好的方法来将该字符串分解为单个单词 最简单的方法是什么 解决方案更新 此链接指向一个略有不同的问题 但我认为答案通常比本页当前问题的答案更
  • Laravel 4.2 Composer 安装错误:“无法扫描类”

    我想通过 Composer 在新的 Laravel 4 2 安装上安装一些软件包 但是 我遇到了例外 这是我的作曲家文件 name laravel laravel description The Laravel Framework keyw
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii

随机推荐

  • openfire推送离线聊天信息的插件

    插件说明 在手机的聊天应用中 xff0c 经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上 xff0c 为了实现这个功能 xff0c 本人就开发了本插件 xff0c 这个openfire 插件是拦截了发给openfire
  • APNs 推送原理及问题

    http bbs csdn net topics 390461996 在 iOS 平台上 xff0c 大部分应用是不允许在后台运行并连接网络的 在应用没有被运行的时候 xff0c 只能通过 Apple Push Notification S
  • app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)

    在app的后端设计中 xff0c 免不了消息的推送 xff0c 短信 xff0c 邮件等服务 xff0c 下面就个人的开发经验谈谈这方面 xff08 1 xff09 最重要的是 xff0c 各种推送一定要放在队列系统中处理 xff0c 不然
  • 解决openfire中发送某些特殊字符会断开xmpp连接的问题

    在openfire中 xff0c 如果发送某些特殊的字符 xff08 例如一些表情符合 xff09 xff0c 会断开xmpp的连接 xff0c 经查 xff0c 是由以下的代码问题引起的 xff1a src java org jiveso
  • ucloud发送短信的php sdk

    在ucloud官方的版本中 xff0c 只有python的sdk可供调用 xff0c 现提供php的sdk发送短信 项目地址 xff1a https github com newjueqi ucloudsms 使用方法 xff1a 1 在c
  • iOS推送:Java服务器端发送表情(绘文字)

    http blog csdn net musou ldns article details 8692520 功能的时候 xff0c 客户要求能够给iphone发送表情图标 xff0c 也就是绘文字 手机环境 xff1a iOS5 iOS6
  • ROS话题queue_size的含义与设置技巧

    ROS1中发布和订阅话题时 xff0c 都需要设置queue size xff0c 参考 xff1a roscpp Overview Publishers and Subscribers ROS Wiki rospy Overview Pu
  • PHP Simple HTML DOM解析器使用入门

    http www cnphp info php simple html dom parser intro html 一直以来使用php解析html文档树都是一个难题 Simple HTML DOM parser 帮我们很好地解决了这个问题
  • app后端设计(4)-- 通讯的安全性

    在app 的后台设计中 xff0c 一个很重要的因素是考虑通讯的安全性 因此 xff0c 我们需要考虑的要点有 xff1a 1 在app 和后台 xff0c 都不能保存任何用户密码的明文 2 在app 和后台通讯的过程中 xff0c 怎么保
  • app后端设计(5)-- 表情的处理

    在app 的应用中 xff0c 文字中夹带表情是个很常见 xff0c 那么 xff0c 在后台处理表情的时间 xff0c 我遇到过下面两个问题 xff1a 1 表情在mysql 的存储 表情的utf8 编码 xff0c 有时是有4 个字节的
  • app后端设计(6)-- LBS

    在LBS的应用中 xff0c 一个基本的需求是查找附近的用户 xff0c 现在有两种做法 xff1a 1 使用mysql的空间数据库 xff0c 具体做法参考 xff1a http blog sina com cn s blog a48af
  • app后端设计--总目录

    做了3年app相关的系统架构 xff0c api设计 xff0c 先后在3个创业公司中工作 xff0c 经历过手机网页端 xff0c android客户端 xff0c iphone客户端 xff0c 现就职于app云后端平台bmob xff
  • app后端设计(7)-- 项目管理

    移动互联网行业是个快速发展的行业 xff0c 需求不断变化 xff0c 产品更新快 基于移动互联网的以上特点 xff0c 在开发产品的过程中 xff0c 我们放弃了传统的瀑布流开发模型 xff0c 引入了精益的理念和scrum 这个敏捷开发
  • app后端设计(8)-- 数据库分表

    当项目上线后 xff0c 随着用户的增长 xff0c 有些数据表的规模会以几何级增长 xff0c 当数据达到一定规模的时候 xff08 例如100万条 xff09 xff0c 查询 xff0c 读取性能就下降得很厉害 xff0c 这时 xf
  • app后端设计(9)-- 动态通知

    在app中 xff0c 例如在通知界面 xff0c 当新通知的时候 xff0c 需要显示有多少条通知 xff0c 用户点击 获取新通知 后 xff0c 就能看到新的通知 那么在app端 xff0c 怎么才能知道有多少条新通知 xff1f 实
  • app后端设计(10)--数据增量更新

    在新浪微博的app中 xff0c 从别的页面进入主页 xff0c 在没有网络的情况下 xff0c 首页中的已经收到的微博还是能显示的 xff0c 这显然是把相关的数据存储在app本地 使用数据的app本地存储 xff0c 能减少网络的流量
  • app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为 xff0c 在小型的创业团队中 xff0c 特别是以应用产品为主 xff0c 在架构后台的时候 xff0c 需要集中精力解决自身业务上的问题 xff0c 不是花时间解决第三方已经解决的问题 xff0c 简单点来说 xff0c 就是
  • 多机器人集群网络通信协议分析

    本文讨论的是多机器人网络通信各层的情况和协议 每个机器人连接一个数据传输通信模块 xff08 以下简称为数传 xff0c 也泛指市面上的图传或图数一体的通信模块 xff09 xff0c 数传之间进行组网来传递信息 根据ISO的划分 xff0
  • Nginx多虚拟主机下泛域名配置

    http www tuicool com articles F3Azuq 近上一个应用 xff0c 让用户可以自定义二级域名 xff0c 所以要配置一个泛域名来解析用户的自定义域名 首先来说说nginx下的泛域名配置 xff0c nginx
  • PHP集成支付宝快速实现充值功能

    http blog lixiphp com php alipay fast chongzhi axzz2wy4huhBm 本文将介绍如何快速通过PHP类库来集成 整合支付宝来实现充值功能 如果你的系统想要扩充积分 账户余额等功能 xff0c