In-App支付測試及安全性
Last updated
Last updated
One store在開發環境(以下稱"Sandbox")和商用支付環境(以下稱"商用測試")中支持In-App商品的支付測試。 Sandbox不是商用支付環境,而是虛擬支付環境。在支付界面中,如果您在支付失敗或成功時選擇了您所希望的回應,系统就會發送相應的回應结果。 商用測試是在商用支付環境中進行相應In-App商品的支付,並發送支付结果。 在商用測試環境下進行支付時,如不取消支付,則可能會產生費用,因此在支付測試後一定要取消支付。
所有In-App商品必須在Sandbox裡進行1次以上測試,首次註冊商品時,如有1個个未進行測試的In-App商品,則無法激活驗證請求按鈕。
為了在Sandbox及商用環境下進行測試,需事先將One store ID註冊為測試ID。 如果用未註冊的One store ID進行測試,則無法在Sandbox進行測試,且在商用測試環境下,進行的會是實際商用支付,而非測試商用支付,會導致產生實際費用,因此需要注意。
One store對通過測試ID支付的訂單不負有責任。測試ID的管理及支付測試請在開發公司内部負責人的監管下進行。
在開發者中心>Apps > 商品選擇 > In-App資訊界面點擊"支付測試"按鈕,即可出現In-App支付測試界面。 可以在"In-App支付測試"界面裡管理測試ID或查詢支付測試的歷史紀錄。
為了在開發及商用環境中測試In-App支付,必須事先註冊測試ID。 在In-App支付測試界面中選擇"註冊/管理測試ID"Tab,可轉至管理測試ID的界面。 測試ID為One store用戶ID,可查詢在One store註冊的會員ID進行註冊。 如果不是One store會員,則可以運行One store應用軟件,創建一個測試用的One store ID後,然後將該ID註冊為測試ID即可。
查詢要作為測試ID的One store會員ID。
確認查詢的One store ID後,用該測試ID選擇在哪个支付環境(Sandbox,商用測試)進行支付測試。
必要時輸入參考事項,單擊註冊按鈕註冊測試ID。
一个測試ID只能選擇一个支付環境,而支付環境設置可隨時更改。
用已註冊的測試ID,可以設置進行支付測試的環境。
更改測試ID的支付環境時,必須點擊"保存",保存新的設置。
刪除測試ID(個別刪除,批量刪除)
測試ID不再有效時,可刪除測試ID。
可以點擊"刪除"按鈕後刪除個別測試ID,也可以選擇多個測試ID後點擊"刪除已選ID"按鈕進行批量刪除。
如果同一測試ID可以在多個應用軟件使用,則可以將測試ID設置複製到其他應用軟件。
只有可複製的應用軟件才能點擊check box,選擇好要複製的測試ID設置的對象軟件後,點擊"複製"。
Sandbox不是商用支付環境,而是虛擬支付環境。在支付界面中,如果您在支付失敗或成功時選擇了您所希望的回應,系统就會發送相應的回應结果。
在Sandbox支付的訂單可以在In-App支付測試界面的"Sandbox"tap上查詢,也可以取消支付。
所有In-App商品必須在Sandbox裡進行1次以上測試,首次註冊商品時,如有1個未進行測試的In-App商品,則無法激活驗證請求按鈕。
測試環境(商用和Sandbox)資訊與One store服務連接期間保存在memory。 如果通過開發這中心變更了測試ID的測試環境,則必須中止應用軟件定重新啟動。
只有當測試ID設置為Sandbox時,才能進行Sandbox支付測試。 未進行Sandbox支付測試的App商品,In-App商品的測試與否值設置為"N",如果進行測試,則更改為"Y"。
開發訂閱型商品時,如果設定與實際時間相同的支付周期,測試就需要很長的時間。 為此,Sandbox環境支持按訂閱周期調整所需時間,使測試更加順利。 根據每個支付周期和功能,Sandbox内的時間流如下。
支付周期
Sandbox 內時間
1周
5分
1個月
5分
3個月
10分
6個月
15分
1年
30分
功能
Sandbox 内時間
免費訂閱
3分
延期時間
5分
保留帳號
10分
反映價格變更 (7天)
5分
價格變更同意期間 (30天)
5分
商用測試是在商用支付環境中進行相應In-App商品的支付,並發送支付结果。 商用測試支付的訂單可以在In-App支付測試界面"商用測試"tab查詢,也可以取消支付。 在商用測試環境下進行支付時,如不取消支付,則可能會產生費用,因此在支付測試後一定要取消支付。
測試ID設置為商用測試,才能在商用測試環境下進行支付測試。
如果使用未設置成商用測試的測試ID或未註冊為測試ID的One store ID進行支付時,將進行實際的商用支付而非測試的商用支付,請注意這會產生實際費用。 實際發生商用支付時,請立即向One store發送支付資訊,請求取消支付。
您可以对In-App支付測試歷史紀錄進行支付狀態確認及取消支付。 在Sandbox中支付的紀錄可以在In-App支付測試畫面的"Sandbox"Tab上查詢,在商用測試中支付的紀錄可以在In-App支付測試畫面的"商用測試"Tab上查詢。
提供在Sandbox環境下進行的支付測試的歷史紀錄
可以查詢已支付的商品資訊及支付狀態,也可以取消支付。
提供在商用測試環境下進行的支付測試的歷史紀錄。
可以查詢已支付的商品資訊及支付狀態,也可以取消支付。
ONE store In-App支付使用簽名(Signature)的有效性認證方法驗證數據是否偽造和篡改,以確保安全支付。 由於手機應用軟件暴露在許多攻擊的威脅下,為了將這種危險降到最低,建議在開發公司應用軟件或服務器進行簽名認證。 下面是開發公司為了更安全的In-App支付需要進一步準備的事項。
使用開發公司服務器
為了有效避開APK Reverse Engineering等的攻擊,體現代碼和Public key等可以在服務器中保管並進行認證。 在存儲購買資訊時,比起存儲在智能手機,建議最好存儲在開發公司服務器,來確認商品的使用許可。
使用已更改的代碼
One store提供的api sample是向很多人開放的代碼,比起直接使用原件,建議修改后後使用。 如果使用相同的代碼,那么就很容易暴露在攻擊的危險中。
最好使用Proguard等代碼混淆工具保護支付相關代碼。
即使是Public Key,在軟件代碼中加入普通字符串也不是安全的方法。建議例如與其他字符串進行XOR以避免輕易暴露等,使攻擊者無法輕易接近,這是安全的。
要求支付时使用"developerPayload"字段
開發公司在要求支付時,可將任意資訊放入"developerPayload"字段中,并在完成支付后重新收到信息。
在相應字段中加入组合了timestamp等的附加安全驗證的數據,可以使支付结果的驗證更加安全。
認證準備
為了認證的Key算法使用RSA方式,採用'SHA512withRSA'作為簽名的算法。 簽名驗證Key請參考應用One store In-App支付的事前準備頁面中的"許可證密鑰及OAuth認證資訊確認"部分。 簽名簽證KEY的值,根據智能手機或服務器等認證的位置適當存儲並用。
簽名認證api sample
SDK提供"AppSecurity"Utility的Class,可使用"verifyPurchase"Method進行簽名認證。 如果開發公司想不使用SDK,直接進行簽名認證,則必須直接實現"AppSecurity"相同功能的代碼。 詳細的實現內容參考與SDK library一起發放的sample。