佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1496|回复: 7

(已解决)求助php cart和paypal问题

[复制链接]
发表于 11-8-2016 04:13 AM 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 Andrew97 于 11-8-2016 03:30 PM 编辑

我刚刚跟人家学做了一个cart→paypal给钱
Product.php   , success.php , cancel.php
这个就成功进到去Php的test给钱哪里,有show item code n 几多钱。不过不好就是这个只能买一个东西,他没cart

问题来了:
我刚刚做了一个大概一样的,只不过我加了cart和update cart.
我所开启的有
Index.php , viewcart.php , updatecart.php , success.php , cancel.php

全部搞定后dB 也set好了,一按PayPal 的buy now button就是美反应。。。除非要delete那个link to update cart.php的action post...

有谁能帮帮忙,

config.php
<?php
$db_username = 'andrew';
$db_password = 'pass';
$db_name = 'banana';
$db_host = 'localhost';        
                        
//connect to MySql                                                
$db = new mysqli($db_host, $db_username, $db_password,$db_name);                                                
if ($db->connect_error) {
    die('Error : ('. $db->connect_errno .') '. $db->connect_error);
}


?>



viewcart.php
<?php
session_start();
include_once("config.php");

//Set useful variables for paypal form
$paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr'; //Test PayPal API URL
$paypal_id = 'andrew@gmail.com'; //Business Email

//fetch products from the database
$results = $db->query("SELECT * FROM products");

?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>View shopping cart</title>
<link href="style/style.css" rel="stylesheet" type="text/css"></head>
<body>
<h1 align="center">View Cart</h1>
<div class="cart-view-table-back">
<form method="post" action="cart_update.php">
<table width="100%"  cellpadding="6" cellspacing="0"><thead><tr><th>Quantity</th><th>Name</th><th>Price</th><th>Total</th><th>Remove</th></tr></thead>
  <tbody>
         <?php
        if(isset($_SESSION["cart_products"])) //check session var
    {
                $total = 0; //set initial total value
                $b = 0; //var for zebra stripe table
                foreach ($_SESSION["cart_products"] as $cart_itm)
        {
                        //set variables to use in content below
                        $product_name = $cart_itm["product_name"];
                        $product_qty = $cart_itm["product_qty"];
                        $product_price = $cart_itm["product_price"];
                        $product_code = $cart_itm["product_code"];
                        $product_color = $cart_itm["product_color"];
                        $subtotal = ($product_price * $product_qty); //calculate Price x Qty
                        
                           $bg_color = ($b++%2==1) ? 'odd' : 'even'; //class for zebra stripe
                    echo '<tr class="'.$bg_color.'">';
                        echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
                        echo '<td>'.$product_name.'</td>';
                        echo '<td>RM'.$product_price.'</td>';
                        echo '<td>RM'.$subtotal.'</td>';
                        echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
            echo '</tr>';
                        $total = ($total + $subtotal); //add subtotal to total var
        }
               
        }
    ?>
    <tr><td colspan="5"><span style="float:right;text-align: right;">Amount Payable : <?php echo 'RM'.$total;?></span></td></tr>
    <tr><td colspan="5"><a href="index.php" class="button">Add More Items</a><button type="submit">Update</button></td></tr>
  </tbody>
</table>
<form action="<?php echo $paypal_url; ?>" method="post">



<!-- Identify your business so that you can collect the payments. -->
        <input type="hidden" name="business" value="<?php echo $paypal_id; ?>">

        <!-- Specify a Buy Now button. -->
        <input type="hidden" name="cmd" value="_xclick">

        <!-- Specify details about the item that buyers will purchase. -->
        <input type="hidden" name="product_name" value="<?php echo $row['product_name']; ?>">
        <input type="hidden" name="item_number" value="<?php echo $row['product_code']; ?>">
        <input type="hidden" name="amount" value="<?php echo $row['total']; ?>">
        <input type="hidden" name="currency_code" value="MYR">

        <!-- Specify URLs -->
        <input type='hidden' name='cancel_return' value='http://example.com/cancel.php'>
        <input type='hidden' name='return' value='http://example.com/success.php'>

        <!-- Display the payment button. -->
        <!-- Display the payment button. -->
        <input type="image" name="submit" border="0"
        src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif" alt="PayPal - The safer, easier way to pay online">
        <img alt="" border="0" width="1" height="1" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" >
</form>

</form>
</div>

</body>
</html>




cart_update.php
<?php
session_start();
include_once("config.php");


//add product to session or create new one
if(isset($_POST["type"]) && $_POST["type"]=='add' && $_POST["product_qty"]>0)
{
        foreach($_POST as $key => $value){ //add all post vars to new_product array
                $new_product[$key] = filter_var($value, FILTER_SANITIZE_STRING);
    }
        //remove unecessary vars
        unset($new_product['type']);
        unset($new_product['return_url']);
        
         //we need to get product name and price from database.
    $statement = $db->prepare("SELECT product_name, price FROM products WHERE product_code=? LIMIT 1");
    $statement->bind_param('s', $new_product['product_code']);
    $statement->execute();
    $statement->bind_result($product_name, $price);
        
        while($statement->fetch()){
               
                //fetch product name, price from db and add to new_product array
        $new_product["product_name"] = $product_name;
        $new_product["product_price"] = $price;
        
        if(isset($_SESSION["cart_products"])){  //if session var already exist
            if(isset($_SESSION["cart_products"][$new_product['product_code']])) //check item exist in products array
            {
                unset($_SESSION["cart_products"][$new_product['product_code']]); //unset old array item
            }           
        }
        $_SESSION["cart_products"][$new_product['product_code']] = $new_product; //update or create product session with new item  
    }
}




//update or remove items
if(isset($_POST["product_qty"]) || isset($_POST["remove_code"]))
{
        //update item quantity in product session
        if(isset($_POST["product_qty"]) && is_array($_POST["product_qty"])){
                foreach($_POST["product_qty"] as $key => $value){
                        if(is_numeric($value)){
                                $_SESSION["cart_products"][$key]["product_qty"] = $value;
                        }
                }
        }
        //remove an item from product session
        if(isset($_POST["remove_code"]) && is_array($_POST["remove_code"])){
                foreach($_POST["remove_code"] as $key){
                        unset($_SESSION["cart_products"][$key]);
                }        
        }
}


//back to return url
$return_url = (isset($_POST["return_url"]))?urldecode($_POST["return_url"]):''; //return url
header('Location:'.$return_url);


?>

success.php
<?php
include 'config.php';


//Store transaction information from PayPal
$item_number = $_GET['item_number'];
$txn_id = $_GET['tx'];
$payment_gross = $_GET['amt'];
$currency_code = $_GET['cc'];
$payment_status = $_GET['st'];


//Get product price
$productResult = $db->query("SELECT price FROM products WHERE id = ".$item_number);
$productRow = $productResult->fetch_assoc();
$productPrice = $productRow['price'];


if(!empty($txn_id) && $payment_gross == $productPrice && $prevRowNum == 0){


    //Check if payment data exists with the same TXN ID.
    $prevPaymentResult = $db->query("SELECT payment_id FROM payments WHERE txn_id = '".$txn_id."'");


    if($prevPaymentResult->num_rows > 0){
        $paymentRow = $prevPaymentResult->fetch_assoc();
        $last_insert_id = $paymentRow['payment_id'];
    }else{
        //Insert tansaction data into the database
        $insert = $db->query("INSERT INTO payments(item_number,txn_id,payment_gross,currency_code,payment_status) VALUES('".$item_number."','".$txn_id."','".$payment_gross."','".$currency_code."','".$payment_status."')");
        $last_insert_id = $db->insert_id;
    }
?>


<h1>Your payment has been successful.</h1>
<h1>Your Payment ID - <?php echo $last_insert_id; ?>.</h1>


<?php
}else{
?>


<h1>Your payment has failed.</h1>


<?php
}
?>











回复

使用道具 举报


ADVERTISEMENT

发表于 11-8-2016 09:20 PM | 显示全部楼层
你不会全都用这 code 吧.
回复

使用道具 举报

 楼主| 发表于 12-8-2016 12:22 AM 来自手机 | 显示全部楼层
路過人甲 发表于 11-8-2016 09:20 PM
你不会全都用这 code 吧.

什么意思@.@?
回复

使用道具 举报

发表于 25-9-2016 09:54 PM | 显示全部楼层
你的code根本不安全,假如我们直接post value 去success.php, 你有想过这样的结果吗?因为我可以不需要经过付款页面。最安全的方式是不要让人知道你post的value出现在html code,因为我们可以从google developer tool查看html code
回复

使用道具 举报

 楼主| 发表于 26-9-2016 12:43 AM 来自手机 | 显示全部楼层
hooiyijun 发表于 25-9-2016 09:54 PM
你的code根本不安全,假如我们直接post value 去success.php, 你有想过这样的结果吗?因为我可以不需要经过付款页面。最安全的方式是不要让人知道你post的value出现在html code,因为我们可以从google developer too ...

Hi,不好意思你说得可以用google 按source code看html code,那如何才为之安全。。不要拿上面那个来说(很乱)。。。打个比如来说。。。类似form还是其他的说法
回复

使用道具 举报

发表于 26-9-2016 09:31 PM | 显示全部楼层
本帖最后由 hooiyijun 于 26-9-2016 09:32 PM 编辑

test.jpg 在google chrome, 按右键, 选inspect
test2.jpg

或可以按右上角,选More tools -> Developers Tools

可是,你的success.php只是存paypal transaction id,从来没什么update order status。所以算是大概安全下。假如你直接改code成update order status 和让人家拿到confirmation,就不安全咯。




回复

使用道具 举报

Follow Us
 楼主| 发表于 26-9-2016 11:25 PM 来自手机 | 显示全部楼层
hooiyijun 发表于 26-9-2016 09:31 PM
在google chrome, 按右键, 选inspect


或可以按右上角,选More tools -> Developers Tools

可是,你的success.php只是存paypal transaction id,从来没什么update order status。所以算是大概安全下。假如你 ...

Developer tools same as ctrl+u ?
可以帮我看下我现在试做的全部安全?yik6886.com只是用来texting罢了。。。那个chat还没弄好。。。
Login哪里是如果你是user就去user page,可是如果他detect到你是admin就会安排去admin page
回复

使用道具 举报

发表于 27-9-2016 10:38 AM | 显示全部楼层
developer tools not same with ctrl+u
因为developer tools可以实时反映页面的变化。for example: <input type='hidden' name='fname' id='fname' value='test123'>,我们可以从developer tool得知value是test123

不能简单检查html code,必须读所有php code才能知道安不安全。假如还是需要我帮忙检查,可以私下pm。出力要有回报啊。
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 29-8-2025 07:16 AM , Processed in 0.121579 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表