自动回答我自己的问题,因为目标是帮助你们解决 IPN,这足以让自己省去这一步……
提醒:这是关于转换Paypal IPN的以下字段:
$_POST['subscr_date']
$_POST['subscr_effective']
到一个 mysqlDATE
值。
希望能帮助到你!干杯,S。
自动回答我自己的问题,因为目标是帮助你们解决 IPN,这足以让自己省去这一步……
提醒:这是关于转换Paypal IPN的以下字段:
$_POST['subscr_date']
$_POST['subscr_effective']
到一个 mysqlDATE
值。
希望能帮助到你!干杯,S。
Java 用户只需要使用SimpleDateFormat("HH:mm:ss MMM dd, yyyy z")
.
请注意,IPN 指南中这种格式的文档(“HH:MM:SS DD Mmm YY, YYYY PST”)是不正确的,您可以从双年字段中看出这一点。
另请注意,正如我今天刚刚建立的,沙盒测试 IPN 工具发送的内容是第三种格式。
所以,如果你想知道如何将这些日期转换为 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 ;
正如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/并推荐使用。