php 后台怎么把多种支付方式集成在一起 可以先择性安装

发布网友 发布时间:2022-04-23 14:43

我来回答

1个回答

热心网友 时间:2022-04-06 08:46

  本文将介绍如何快速通过PHP类库来集成、整合支付宝来实现充值功能。如果你的系统想要扩充积分、账户余额等功能,那么就要选择一个第三方支付系统来充值。
  支付宝集成时,需要三大步:
  1、通过表单提交信息,系统整合信息,提交信息到支付宝;
  2、用户进行支付后,支付宝后台通知系统处理;
  3、支付宝后台通知完成后,支付宝前台跳转到系统返回地址;
  支付宝PHP类
  PHP 类alipay_notify,主要功能是付款过程中服务器通知处理。
  PHP 类alipay_service,根据支付宝外部服务接口生成支付宝地址。
  我把这2个类,集中到一个文件alipay.class.inc中,点击这里查看并下载PHP支付宝类源码。
  下面主要主要讲解通过支付宝的PHP类来实现整合。
  PHP支付宝集成
  第一步,建立提交充值的基本信息:
  fubao-chong 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 如果用户正常通过支付宝自动跳转回来的
  好的,赶快将以上方法和代码应用到你的积分、账户余额系统把!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com