上週接金立的sdk,客戶端這邊做了很多服務器端的工作,導致我們這邊收不到pay_id,雖然沒什麼問題,不知道對於最後的訂單校驗有影響沒。然後我們這邊簽名錯誤了,與服務器上傳下來的簽名比對錯誤,我自作聰明的吧所有參數拿下來,用postman發給自己測試,但是在校驗Base64.decode(sign)的時候報錯了,具體錯誤是length not correct:got 126 but was expect 128,簡單的說就是Base64.decode(sign)搞出來的是byte[]126,而實際需要的是128報的錯,直接就沒法校驗了,but服務器上卻可以校驗,只不過是校驗出錯了,今天回來在導師的幫助了,發現了,原來我把服務器上的sign直接複製下來,通過postman發給自己的時候,'+'變成了' ',加號變成了空格,導致直接沒法校驗,後來replaceAll("+"," ")之後,就可以了。最後的問題再看了金立提供的文檔之後發現了,就是notifyUrl我們加了參數,但是校驗的時候拿掉,簽名就通過了。
今天在真神的幫助下還把通告的重複發送完成了,對線程又稍微理解了一下。需求:我們需要往不同的服務器通過指定的時間間隔,發送一定數量的通告,然後我在怎麼創建線程、然後將所有服一起發的時候卡住了,因爲Thread.sleep(1000miles)的時候把主線程也給停了,導致不是同時發的,後來真神發我一個demo,看了下大受啓發。發現不同的方法調用後所傳維護的Thread是不用的,然後終於完成了 !
package sql;
import java.util.ArrayList;
import java.util.List;
/**
* Created by chuancong.yan on 2015/8/31.
*/
public class ThreadTest {
public static void task(int number){
List<Thread> list = new ArrayList<Thread>();
for(int i = 0; i < number; i++){
Thread thread = new Thread(new TimerTask(10000, 3, i+""));
thread.start();
list.add(thread);
}
}
public static void main(String[] args) throws InterruptedException{
task(3);
while(true){
System.out.println("1111111111111111");
Thread.sleep(1000);
}
}
}
class TimerTask implements Runnable {
private long sleepTime;
private int times;
private String message;
public TimerTask(long sleepTime, int times, String message) {
this.sleepTime = sleepTime;
this.times = times;
this.message = message;
}
@Override
public void run() {
int i =0;
while(i < times){
System.out.println(message);
i++;
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}