當支付完成將會已post收到以下數值
MerchantID MerchantTradeNo
RtnCode RtnMsg
TradeNo TradeAmt
PaymentDate PaymentType
PaymentTypeChargeFee TradeDate
SimulatePaid CheckMacValue
其中針對CheckMacValue來作確認, 計算方式如下.
步驟一.將以上數值處理成以下狀態, 再在最前面加上HashKey=A123456789012345, 最後面加上HashIV=B123456789012345. 注意!!!! CheckMavValue不加入以下計算
完成品如下, 舉例數值都為111
HashKey=A123456789012345&MerchantID=111&MerchantTradeNo=111&RtnCode=111&RtnMsg=111&TradeNo=111&TradeAmt=111&PaymentDate=111&PaymentType=111&PaymentTypeChargeFee=111&TradeDate=111&SimulatePaid=111&HashIV=B123456789012345
步驟二, 將以上代碼作UrlEncode
HashKey%3dA123456789012345%26MerchantID%3d111%26MerchantTradeNo%3d111%26RtnCode%3d111%26RtnMsg%3d111%26TradeNo%3d111%26TradeAmt%3d111%26PaymentDate%3d111%26PaymentType%3d111%26PaymentTypeChargeFee%3d111%26TradeDate%3d111%26SimulatePaid%3d111%26HashIV%3dB123456789012345
步驟三, 轉為小寫
hashkey%3da123456789012345%26merchantid%3d111%26merchanttradeno%3d111%26rtncode%3d111%26rtnmsg%3d111%26tradeno%3d111%26tradeamt%3d111%26paymentdate%3d111%26paymenttype%3d111%26paymenttypechargefee%3d111%26tradedate%3d111%26simulatepaid%3d111%26hashiv%3db123456789012345
步驟四, 將以上代碼作大寫MD5
0E56DFDB0B806EBCF172ABB1D46E4A28
以下為需要的幫助
0E56DFDB0B806EBCF172ABB1D46E4A28
在繼續請教其他高手前
我想提醒你一點
你兩篇問題中的MD5值是不同的
也就代表「CheckMacValue=驗算過後的MD5」是永遠不會成立的
原因是
這篇裡的步驟三和另一篇的步驟二中
你拿去做MD5的資料是不同的
(一篇是只將key=value的value部份轉小寫;另一篇是全部都轉小寫)
你可能要先決定是那種做法才是對的
否則一切可能都只是做白工
期待好心的高手為你解答你的問題
joey09533225提到:
MerchantTradeNo
應該是你跟歐付寶都會知道的資料,所以在送出資料給歐付寶之前,就應該存進資料庫。如果這個資料使用循序的數字,那可以用mysql的auto_increment來產生。如果是自訂的訂單號,那要想辦法避免重複,例如可以用日期加流水號來做,但是在產生前到存入完成需要lock table。
基本上這是一個訂單,建議你從訂單的角度來思怎麼設計,資料怎麼存放。不要只從金流的角度來思考。
ReturnURL收到資料時,就根據傳來的MerchantTradeNo到資料庫查詢,然後組出你的CheckMacValue來跟歐付寶傳來的做比對,正確的才更新資料庫。
回覆數值1或OK時,只要echo就可以。
大師你好,這才想起如果是隨機的號碼是有機率會重複的。
但我想要嘗試的是只需要將正確付款完成的資料給寫入資料庫,因為有其他的程序會需要調用此資料。
關於訂單的編號我會考慮用循序數字或是其他方式來生成,訂單的資料我想我要再額外新增一個資料表來紀錄訂單的部分,有紀錄的話至少需要時可調用。
我會繼續嘗試寫出CheckMacValue計算的php code.