自动回答我自己的问题,因为我们的目标是帮助你们使用IPN,这足以让你自己挽救这一步......
提醒:它是关于转换Paypal IPN的以下字段:
$_POST['subscr_date']
$_POST['subscr_effective']
到mysql DATE
值。
希望它有所帮助! 干杯, S上。
答案 0 :(得分:1)
Java用户只需使用SimpleDateFormat("HH:mm:ss MMM dd, yyyy z")
。
请注意,IPN指南(“HH:MM:SS DD Mmm YY,YYYY PST”)中此格式的文档不正确,您可以通过双年字段来判断。
另请注意,正如我刚刚建立的那样,沙箱测试IPN工具发送的内容还是第三种格式。
答案 1 :(得分: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 ;
答案 2 :(得分: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)支持网络钩子https://developer.paypal.com/docs/integration/direct/webhooks/rest-webhooks/,通常比IPN https://www.paypal-engineering.com/2014/10/07/webhooks-for-rest-apis-launched/更好,因此建议使用。