首先你需要到開放平臺的管理中心創(chuàng)建一個應用,創(chuàng)建好了之后點擊查看應用,在應用環(huán)境那里填寫好你的應用網(wǎng)關(guān)、回調(diào)地址、應用公鑰。應用公鑰怎么獲取,支付寶有提供生產(chǎn)器,還有說明。生成就好。生成后有3個文件在下面,分別是私鑰、公鑰、私鑰的pkcs8格式。改后綴為txt就可以獲得文本,也就是可以復制粘貼。
然后去共功能信息那里申請你要的功能,申請完了之后點擊上線,等待審核。
APP支付功能肯定是要簽約的,如果你的應用沒有上線的話,簽約應該去b.alipay.com那里簽約,具體是,我要收款——APP支付,然后點擊右上角的立即簽約,按要求填寫。等待審核。
簽約成功、上線成功就可以使用APP支付功能了。接下來下載最新的支付寶SDK,你可以在demo中測試你的appID、privateKey和你的應用環(huán)境,還有demo中沒有沒有加order.notify_url,需要自己加上。demo里測試時可以的,但是不能用于真正的上線,因為demo中的加簽過程是放在客戶端的,這當然不行。所以實際上客戶端需要導入demo中的文件就只有Order.h和Order.m。加簽過程放在服務(wù)端。Order.m中有一個- (NSString*)encodeValue:(NSString*)value方法,建議在.h中聲明一下。為什么要在.h中聲明,因為服務(wù)端返回給你的簽名也好還是orderString也好,是帶有特性字符的,需要做下處理(沒有就當我沒說)。所以到時候接收到服務(wù)器返回的簽名就可以直接調(diào)用- (NSString*)encodeValue:(NSString*)value方法了,當然,你也可以把方法搬過去,都可以,重點是處理特殊字符。另外,Order.m中的encodeValue方法處理特殊字符是使用的CFURLCreateStringByAddingPercentEscapes方法,聽說這個方法可能會過期,替換方法是stringByAddingPercentEncodingWithAllowedCharacters。這里我把詳細的寫下來,省的大家再費時間。
??NSString *signedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)sign, NULL, (CFStringRef)@"!*'();:@&=+ $,./?%#[]", kCFStringEncodingUTF8));
等于
NSCharacterSet *characterSet = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+ $,./?%#[]"] invertedSet];
NSString *signedString = [sign stringByAddingPercentEncodingWithAllowedCharacters:characterSet];
在做支付寶支付的時候,要注意iPhone5的測試。我發(fā)現(xiàn)iPhone5和iPhone5以上的機型的biz_content的排序是不一樣的,排序不同簽名就不同,如果排序簽名都是后臺都幫你弄好了,就不用操心這個,如果后臺處理排序,而你encode的話,就要注意這個問題了。(不要說這個問題不會發(fā)生,是有可能的!)
一般報ALI40247的,基本都是和簽名有關(guān)的。簽名問題出現(xiàn)的原因也有很多種,除了支持中心提到的簽約上線、公鑰私鑰的問題,還有可能是簽名的編碼、商品信息沒有排序、商品信息和簽名信息不一致等等。還有一個?。?!申請功能那里,如果你其他東西都沒錯的話,就把申請的app支付刪掉重新添加,然后再等一會兒,再試一下就可以了(很難找到的ALI40247原因)。
如果在簽約和上線中遇到問題,打支付寶的客服電話。如果是技術(shù)問題,打電話就沒什么用了。