【问题标题】:Getting Paypal Return string into mysql database?将Paypal返回字符串输入mysql数据库?
【发布时间】:2013-04-11 00:22:07
【问题描述】:
public function run()
    {
        $postFields = 'cmd=_notify-validate';

        foreach($_POST as $key => $value)
        {
            $postFields .= "&$key=".urlencode($value);
        }

        $ch = curl_init();

        curl_setopt_array($ch, array(
            CURLOPT_URL => $this->_url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $postFields
        ));

        $result = curl_exec($ch);
        curl_close($ch);

        $fh = fopen('result.txt', 'w');
        fwrite($fh, $result . ' -- ' . $postFields);
        fclose($fh);

        echo $result;
    }
}
?>

我在一个文本文件中得到结果,如下所示:

CMD = _notify-验证&的test_ipn = 1&payment_type =即时&PAYMENT_DATE = 02:39:41 2011年10月6日PDT&payment_status=Completed&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&payer_email=buyer@paypalsandbox.com&payer_id=TESTBUYERID01&address_name=John史密斯&= ADDRESS_COUNTRY美国&address_country_code = US&address_zip = 95131&ADDRESS_STATE = CA&ADDRESS_CITY =圣何塞&address_street = 123,任何街道和商业=卖家@ paypalsandbox.com&RECEIVER_EMAIL =卖家@ paypalsandbox.com&receiver_id = TESTSELLERID1&residence_country = US&ITEM_NAME =东西和ITEM_NUMBER = AK-1234和数量= 1&运费= 3.04税= 2.02&mc_currency = USD&mc_fee = 0.44 mc_gross = 12.34&mc_gross_1 =9.34&txn_type=web_accept&txn_id=41106939¬ify_version=2.1&custom=xyz123&charset=windows-1252&verify_sign=AB3bSjvFd3wXL7rCt.OOGW-nSKg-Ahh5RbboVG4bn9LSAon94Wjt2Oj9

如何解码这个字符串并将其放入mysql数据库?

我需要将客户的名字、姓氏、地址、电子邮件、商品编号、商品名称、数量、运输和时间戳放入数据库。请我在代码中走了这么远,我只需要帮助解码它并将其输入数据库。谢谢

【问题讨论】:

  • 您的文件似乎只包含帖子字段,结果在哪里?
  • 结果就是上面看到的字符串,我在文本文件中捕获。

标签: php mysql curl


【解决方案1】:

您不需要对字符串进行解码。

我刚刚查看了 PayPal 文档。 notify-validate 返回的唯一内容是字符串 VERIFIEDINVALID。您发布的所有内容都不是 PayPal 返回字符串的一部分。如果你想要姓氏,它在$_POST['last_name']

要将其放入 mysql INSERT 语句,请执行以下操作(我只显示 4 列,您可以推断出您想要的所有字段):

$stmt = $con->prepare("INSERT INTO mytable (first_name, last_name, address, email) values (?, ?, ?, ?)");
$stmt->bind_param("ssss", $_POST['first_name'], $_POST['last_name'], $_POST['address'], $_POST['email']);
$stmt->execute();

【讨论】:

  • 我知道 sql 代码,只是不知道如何将数组放入 msysql 插入语句中。
  • 我已经添加了一些代码来证明这一点,它假设您使用的是 mysqli API。如果你使用 PDO,翻译应该是显而易见的。如果您使用的是 mysql 扩展,请升级。
  • 你是对的,notify-validate 返回已验证或无效。我得到了从贝宝发送 IPN 到文本文件的结果。该字符串中的某些字段是我在数据库中想要的。我理解sql语句。问题是即使在涉及 txt 文件之前,我如何从字符串中获取例如 last_name 构建一个数组,然后获取结果并将其放入数据库中? "$stmt = $con->prepare" 之前是什么?
  • 你不能从字符串中得到它。该字符串来自$_POST。所以只需从$_POST 获取它。
  • 您是否在与向 PayPal 发送命令的脚本不同的脚本中执行此操作?这就是你需要使用该文件的原因吗?我建议您将json_encode($_POST) 写入文件,而不是查询字符串。然后使用json_decode() 将其转换回数组。
【解决方案2】:

使用parse_str

parse_str($string,$array);
var_dump($array);

【讨论】:

    【解决方案3】:

    您可以使用 & 分解字符串以获取每个参数及其值,然后您可以使用 = 分解以获取键和值。

    $params = explode('&', $result);
    
    $paypal_result_arr = array();
    
    foreach($params AS $param) {
       $param_arr = explode('=', $param);
    
       if(count($param_arr) == 2) {
           $paypal_result_arr[$param_arr[0]] = $param_arr[1];
       }
    }
    

    $paypal_result_arr 关联数组将为您提供从 paypal 返回的所有值。 之后,您可以使用代码 $paypal_result_arr['first_name'] 等获取名字...

    【讨论】:

    • 不会解码查询字符串中的特殊字符,例如 %hex 代码。这就是为什么你应该使用像parse_str这样的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2012-09-01
    • 1970-01-01
    • 2012-07-23
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多