sql >> データベース >  >> RDS >> Mysql

PayPalIPNがMySQLデータベースを更新しない

    Paypal IPNが返すステータスは、最初の文字が大文字です。

    したがって、Completed completedと等しくありません 。これを試してください

    curl_close($ch);
    
    if (strcmp ($res, "VERIFIED") == 0) {
    
    $token = $_POST['invoice'];
    $item= $_POST['invoice'];
    
    $conn=new PDO("mysql:host=SERVER;dbname=MYDATABASE","NAME","PASS");
    if ($_POST['payment_status'] == 'Completed')
    {
       $sql="UPDATE `tbl_products` SET `id_status` = 3 WHERE `id_product`=:idproduct";
       $stmt=$conn->prepare($sql);
       $stmt->bindParam(':idproduct',$item);
       $stmt->execute();
    }
    if ($_POST['payment_status'] == 'Pending')
    {
        $sql="UPDATE `tbl_products` SET `id_status` = 2 WHERE `id_product`=:idproduct";
        $stmt=$conn->prepare($sql);
        $stmt->bindValue(':idproduct',$item);
        $stmt->execute();
    }
    foreach ($_POST as $key => $value)
    {
        $emailtext .= $key . " = " .$value ."\n\n";
    }
    mail("MYEMAIL", "Live-VALID IPN", $emailtext . "\n\n" . $req);
    }
    else if (strcmp ($res, "INVALID") == 0)
    {
    // log for manual investigation
    foreach ($_POST as $key => $value)
    {
        $emailtext .= $key . " = " .$value ."\n\n";
    }
    mail("MYEMAIL", "Live-INVALID IPN", $emailtext . "\n\n" . $req);
    }
    

    ステータスを変数に保存し、php strtolowerを使用することをお勧めします それらを小文字にする関数。

    $paypalStatus = strtolower($_POST['payment_status']);
    

    このようにチェックするより

    if($paypalStatus == 'pending')
    



    1. ネストされたmysqlクエリをcodeigniterスタイルに変換します

    2. mysqlを使用してデータベースを順次更新する方法

    3. グループ化された連結:重複の順序付けと削除

    4. リモートmySQL接続スローは、XAMPPからの古い安全でない認証エラーを使用してMySQL4.1以降に接続できません