0

自动回答我自己的问题,因为目标是帮助你们解决 IPN,这足以让自己省去这一步……

提醒:这是关于转换Paypal IPN的以下字段:

  • $_POST['subscr_date']
  • $_POST['subscr_effective']

到一个 mysqlDATE值。

希望能帮助到你!干杯,S。

4

3 回答 3

1

Java 用户只需要使用SimpleDateFormat("HH:mm:ss MMM dd, yyyy z").

请注意,IPN 指南中这种格式的文档(“HH:MM:SS DD Mmm YY, YYYY PST”)是不正确的,您可以从双年字段中看出这一点。

另请注意,正如我今天刚刚建立的,沙盒测试 IPN 工具发送的内容是第三种格式。

于 2013-02-20T01:00:43.097 回答
0

所以,如果你想知道如何将这些日期转换为 mysql,下面是代码:

DELIMITER $$
DROP FUNCTION  IF EXISTS ppdate_to_mysqldate$$

CREATE FUNCTION ppdate_to_mysqldate(I_PP_EFFECTIVE_DATE VARCHAR(32)) RETURNS DATE DETERMINISTIC
BEGIN
DECLARE dteStart DATE;

    /*
        I_PP_EFFECTIVE_DATE:    
        . from doc:
            Date when the subscription modification will be effective.
            Time/Date stamp generated by PayPal, in the following format: HH:MM:SS DD Mmm YY, YYYY PST
        . from real example: 
            03:00:00 Mar 11, 2013 PDT
            06:56:24 Feb 11, 2013 PST
    */

    IF INSTR(I_PP_EFFECTIVE_DATE, 'PDT') > 0 THEN
        SELECT STR_TO_DATE(I_PP_EFFECTIVE_DATE, '%H:%i:%s %b %e, %Y PDT') INTO dteStart FROM DUAL;
    ELSE 
        SELECT STR_TO_DATE(I_PP_EFFECTIVE_DATE, '%H:%i:%s %b %e, %Y PST') INTO dteStart FROM DUAL;
    END IF;

    RETURN dteStart;
END$$

DELIMITER ;
于 2013-02-12T19:25:48.093 回答
0

正如https://stackoverflow.com/users/670078/panagiotis所指出的,如果您使用的是 PHP,最简单的答案是使用 strtotime 转换。

这是一个更完整的复制/粘贴 PHP 解决方案:

$subscr_date = date('Y-m-d H:i:s', strtotime($_POST['subscr_date']));
$subscr_effective = date('Y-m-d H:i:s', strtotime($_POST['subscr_effective']));

对某些人来说,使用函数可能会更好(虽然它是更多的代码,但我经常被指责做事情“简单”而不是“最佳实践”......;)

function changePaypalDateToMySQL($paypalDate){
    return date('Y-m-d H:i:s', strtotime($paypalDate));
}

$subscr_date = changePaypalDateToMySQL($_POST['subscr_date']);
$subscr_effective = changePaypalDateToMySQL($_POST['subscr_effective']);

作为附加说明,PayPal 支持 webhook https://developer.paypal.com/docs/integration/direct/webhooks/rest-webhooks/,这通常比 IPN https://www.paypal-engineering.com/ “更好” 2014/10/07/webhooks-for-rest-apis-launched/并推荐使用。

于 2018-06-26T16:18:44.447 回答