注意:1按照人家的參數規則,規范填寫參數列表;2商家信息填寫正確;3然后提交走后注意此時告別了咱們的服務器,將在咱們服務器的訂單信息提交到了支付寶服務器,然后支付寶服務器進行支付寶支付流程,當如果支付成功了顯示@@@@@@不要高興太早,這才是個開始噢,然后就是支付寶一個異步回調一個同步通知環節。同步一般就是告訴用戶支付成功,也就是你的錢已經給了別人了,,此時用戶關心,給到了沒有,也就是異步操作************特別注意回調環節首先支付寶自己會對該筆訂單進行安全等驗證---包括簽名驗證://計算得出通知驗證結果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
這個$verify_result 是簽名等驗證是否成功的返回結果,具體驗證環節就在$alipayNotify->verifyNotify();所調用的這個函數里,我被坑了一下
/**
* 獲取返回時的簽名驗證結果
* @param $para_temp 通知返回來的參數數組
* @param $sign 返回的簽名結果
* @return 簽名驗證結果
*/
function getSignVeryfy($para_temp, $sign) {
unset($para_temp['_URL_']);
//除去待簽名參數數組中的空值和簽名參數
$para_filter = paraFilter($para_temp);
//對待簽名參數數組排序
$para_sort = argSort($para_filter);
//把數組所有元素,按照“參數=參數值”的模式用“&”字符拼接成字符串
$prestr = createLinkstring($para_sort);
$isSgin = false;
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, trim($this->alipay_config['key']));
break;
default :
$isSgin = false;
}
return $isSgin;
}
這個簽名驗證$para_temp也就是人家返回的參數列表,thinkPHP 的URL是pathinfo模式,返回的是?&正常的參數串,不知道為什么自己給參數串加了個_URL_這個作為參數弄進去了,結果造成
/**
* 驗證簽名
* @param $prestr 需要簽名的字符串
* @param $sign 簽名結果
* @param $key 私鑰
* return 簽名結果
*/
function md5Verify($prestr, $sign, $key) {
$prestr = $prestr . $key;
$mysgin = md5($prestr);
return $mysgin;
if($mysgin == $sign) { //造成mysgin和人家返回的sign簽名不一致,,,無語嘍?。∠攵枷氩坏绞莗athinfo搞得,,,用unset($para_temp['_URL_']);刪掉了這個參數解決了!
return true;
}
else {
return false;
}
}
這個問題告別了,又來了一個,,,是我個人二了?。?!嘿嘿沒有搞清楚當前服務器是我還是支付寶,,,我操作異步回調,給數據庫里面,加入訂單支付的訂單信息,但是獲取當前用戶session中存的uid,呵呵了?。?!就是獲取不到,人家現在在支付寶服務器,而你的session是存在了咱自己的服務器,,,所以就呵呵了啊?。∠氚艳k法把你的uid讓他會傳給你,,,自己想辦法吧
這個問題告別了,,又又來了一個,,還是自己二二了,,,沒看人家回調函數的要求,,,當你操作完訂單什么的,,,然后給人家輸出success 注意啊注意,之前不要有任何的輸出,,,你返回的這個success是告訴支付寶,你操作訂單是否完成的一個標志,,如果支付寶服務器接收到了success,然后人家就停止回調傳參數了,,,如果人家查不到你返回的信息是success,,這個時候支付寶孩子就會不斷的調用回調方法
,,,這個時候就會造成,用戶存了一毛,然后支付寶不斷回調你的回調方法,,,造成訂單表不斷修改……………………無語樓?。。〈蠹易⒁庖幌拢。?!
http://help.alipay.com/support/help_detail.htm?help_id=397375&keyword=%B6%E0%B4%CE%D2%EC%B2%BD%BB%D8%B5%F7
新聞熱點
疑難解答