小弟最近在做银行支付接口,由于是与银行直接对接,银行提供的开发文档没有php版本,不知道哪位大神有这方面的开发经验,能提供一些例子让小弟学习一下吗~非常感谢~

解决方案 »

  1.   

    <?phpclass Alipay { /**
     * 输出支付代码
     *     
     * @param  array $product 订单信息
     * @param  array $pay  支付信息
     * @return string
     */
     function OutCode($product,$pay) {
      global $INFO;
      if(!empty($pay['payment_entitie']) and $pay['payment_entitie'] == 1) {
       $service = 'create_direct_pay_by_user';
      } else {
       $service = 'trade_create_by_buyer';
      }
      $payer = array(
      'service'           => $service,
      'partner'           => $pay['payment_friend'],
      '_input_charset'    => 'utf-8',
      'return_url'        => $INFO['site_url'].'/autocart/cart_payfourthly.php?pay_id='.intval($pay['pay_id'])."'",
      'subject'           => $product['order_sn'],
      'out_trade_no'      => $product['order_id'],
      'price'             => $product['order_amount'],
      'quantity'          => 1,
      'payment_type'      => 1,
      'logistics_type'    => 'EXPRESS',
      'logistics_fee'     => 0,
      'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
      'seller_email'      => $pay['payment_user']
      );
      ksort($payer);
      reset($payer);  $param = '';
      $sign  = '';  foreach ($payer AS $key => $val)
      {
       $param .= "$key=" .urlencode($val). "&";
       $sign  .= "$key=$val&";
      }  $param = substr($param, 0, -1);
      $sign  = substr($sign, 0, -1). $pay['payment_key'];  $button = '<div style="text-align:center"><input type="button" onclick="window.open(\'https://www.alipay.com/cooperate/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\',\'_self\')" value="马上使用支付宝支付" /></div>';  return $button;
     }
     /**
    * 相应操作
    *     * @return bool
    */
     function GetDo($pay="") {
      if(trim($_GET['code']) == 'alipay') {
       $pay_id = intval($_GET['pay_id']);
       $payment  = $this->GetPayment($pay_id);
       $order_sn = trim($_GET['out_trade_no']);   /* 检查支付的金额是否相符 */
       if (!$this->CheckMoney($order_sn, $_GET['total_fee']))
       {
        return false;
       }   /* 检查数字签名是否正确 */
       ksort($_GET);
       reset($_GET);   $sign = '';
       foreach ($_GET AS $key=>$val)
       {
        if ($key != 'sign' && $key != 'sign_type' && $key != 'code')
        {
         $sign .= "$key=$val&";
        }
       }   $sign = substr($sign, 0, -1) . $payment['alipay_key'];
       if (md5($sign) != $_GET['sign'])
       {
        return false;
       }   if ($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS')
       {
        /* 改变订单状态 */
        $this->OrderPaid($order_sn, 4);  //付款中    return true;
       }
       elseif ($_GET['trade_status'] == 'TRADE_FINISHED')
       {
        /* 改变订单状态 */
        $this->OrderPaid($order_sn,1);  //已付款,此处未用    return true;
       }
       else
       {
        return false;
       }
      }
     }
     function GetPayment($pay_id) {
      global $DB,$INFO;
      $Sql   = "select * from `{$INFO[DBPrefix]}pay_type` where pay_id='".$pay_id."'";
      $query   = $DB->query($Sql);
      $payment = $DB->fetch_array($query);
      return $payment;
     } function CheckMoney($order_sn,$total) {
      global $DB,$INFO;
      $Sql  = "select * from `{$INFO[DBPrefix]}order_table` where order_id='".$order_sn."'";
      $query   = $DB->query($Sql);
      $order  = $DB->fetch_array($query);
      if($order['totalprice'] == $total) {
       return true;
      } else {
       return false;
      }
     }
     function OrderPaid($order_sn,$state) {
      global $DB,$INFO;
      $Sql  = "update {$INFO[DBPrefix]}order_detail` set detail_pay_state='".$state."' where order_id='".$order_sn."' and detail_order_state!=5 and detail_order_state!=0 and detail_order_state!=4";
      $query  = $DB->query($Sql);
      if($query) {
       return true;
      }
      return false;
     }
    }
    ?>
      

  2.   

    <?phpclass Alipay { /**
     * 输出支付代码
     *     
     * @param  array $product 订单信息
     * @param  array $pay  支付信息
     * @return string
     */
     function OutCode($product,$pay) {
      global $INFO;
      if(!empty($pay['payment_entitie']) and $pay['payment_entitie'] == 1) {
       $service = 'create_direct_pay_by_user';
      } else {
       $service = 'trade_create_by_buyer';
      }
      $payer = array(
      'service'           => $service,
      'partner'           => $pay['payment_friend'],
      '_input_charset'    => 'utf-8',
      'return_url'        => $INFO['site_url'].'/autocart/cart_payfourthly.php?pay_id='.intval($pay['pay_id'])."'",
      'subject'           => $product['order_sn'],
      'out_trade_no'      => $product['order_id'],
      'price'             => $product['order_amount'],
      'quantity'          => 1,
      'payment_type'      => 1,
      'logistics_type'    => 'EXPRESS',
      'logistics_fee'     => 0,
      'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
      'seller_email'      => $pay['payment_user']
      );
      ksort($payer);
      reset($payer);  $param = '';
      $sign  = '';  foreach ($payer AS $key => $val)
      {
       $param .= "$key=" .urlencode($val). "&";
       $sign  .= "$key=$val&";
      }  $param = substr($param, 0, -1);
      $sign  = substr($sign, 0, -1). $pay['payment_key'];  $button = '<div style="text-align:center"><input type="button" onclick="window.open(\'https://www.alipay.com/cooperate/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\',\'_self\')" value="马上使用支付宝支付" /></div>';  return $button;
     }
     /**
    * 相应操作
    *     * @return bool
    */
     function GetDo($pay="") {
      if(trim($_GET['code']) == 'alipay') {
       $pay_id = intval($_GET['pay_id']);
       $payment  = $this->GetPayment($pay_id);
       $order_sn = trim($_GET['out_trade_no']);   /* 检查支付的金额是否相符 */
       if (!$this->CheckMoney($order_sn, $_GET['total_fee']))
       {
        return false;
       }   /* 检查数字签名是否正确 */
       ksort($_GET);
       reset($_GET);   $sign = '';
       foreach ($_GET AS $key=>$val)
       {
        if ($key != 'sign' && $key != 'sign_type' && $key != 'code')
        {
         $sign .= "$key=$val&";
        }
       }   $sign = substr($sign, 0, -1) . $payment['alipay_key'];
       if (md5($sign) != $_GET['sign'])
       {
        return false;
       }   if ($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS')
       {
        /* 改变订单状态 */
        $this->OrderPaid($order_sn, 4);  //付款中    return true;
       }
       elseif ($_GET['trade_status'] == 'TRADE_FINISHED')
       {
        /* 改变订单状态 */
        $this->OrderPaid($order_sn,1);  //已付款,此处未用    return true;
       }
       else
       {
        return false;
       }
      }
     }
     function GetPayment($pay_id) {
      global $DB,$INFO;
      $Sql   = "select * from `{$INFO[DBPrefix]}pay_type` where pay_id='".$pay_id."'";
      $query   = $DB->query($Sql);
      $payment = $DB->fetch_array($query);
      return $payment;
     } function CheckMoney($order_sn,$total) {
      global $DB,$INFO;
      $Sql  = "select * from `{$INFO[DBPrefix]}order_table` where order_id='".$order_sn."'";
      $query   = $DB->query($Sql);
      $order  = $DB->fetch_array($query);
      if($order['totalprice'] == $total) {
       return true;
      } else {
       return false;
      }
     }
     function OrderPaid($order_sn,$state) {
      global $DB,$INFO;
      $Sql  = "update {$INFO[DBPrefix]}order_detail` set detail_pay_state='".$state."' where order_id='".$order_sn."' and detail_order_state!=5 and detail_order_state!=0 and detail_order_state!=4";
      $query  = $DB->query($Sql);
      if($query) {
       return true;
      }
      return false;
     }
    }
    ?>
      

  3.   

    那你开发的是哪一个银行的,怎么会没有php版本的呢?