App適配鴻蒙Next,開始做支付功能了,目前來說只有支付寶支持鴻蒙Next,微信還沒上架,但是支付寶官方的文檔跟Demo都很老,下載官方的Demo用最新版的DevEco-Studio導入都不成功。 後面在OpenHarmony三方庫中心倉找到了最新的代碼: https://ohpm.openhar ...
App適配鴻蒙Next,開始做支付功能了,目前來說只有支付寶支持鴻蒙Next,微信還沒上架,但是支付寶官方的文檔跟Demo都很老,下載官方的Demo用最新版的DevEco-Studio導入都不成功。
後面在OpenHarmony三方庫中心倉找到了最新的代碼:
https://ohpm.openharmony.cn/#/cn/detail/@cashier_alipay%2Fcashiersdk
官方Demo地址:
代碼實現
首先依賴支付寶SDK,打開終端,cd到項目文件夾,輸入命令,如果ohpm沒有加入環境變數的話需要手動加一下:
ohpm i @cashier_alipay/cashiersdk
把OrderInfoUtil跟SignUtils文件複製到你的項目中來,當點擊界面上的支付按鈕時,先請求伺服器,獲取支付信息,然後調用new Pay().pay(orderInfo, true)進行支付。PayInfo對象所有信息都應該伺服器返回。
///這個支付信息對象的所有值都應該伺服器返回
let obj = new PayInfo();//支付信息
obj.appId = "1111111111111";
obj.orderId = "1111111111"
obj.productName = "1年VIP"
obj.amount = 10
obj.notifyUrl = 'https://www.huawei.com'
obj.rsaPrivate = "MIICXQIBAA"
OrderInfoUtil.getOrderInfo(obj).then(orderInfo=>{
// orderInfo 由服務端生成
// 第二個參數 控制是否展示支付寶loading
new Pay().pay(orderInfo, true).then((result) => {
let message =
`resultStatus: ${result.get('resultStatus')} memo: ${result.get('memo')} result: ${result.get('result')}`;
console.log("支付結果:"+message);
if (result.get('resultStatus') == '9000') { //支付成功
console.log("支付成功");
}else{
console.log("支付失敗");
}
}).catch((error: BusinessError) => {
console.log(error.message);
});
})
效果圖
註意事項
官方的Demo是沒有notify_url這個參數的,但是我發現不加上notify_url的話,支付成功不會回調我們的業務伺服器,於是我對比安卓的代碼給加上的,還有notify_url必須要加在method參數後面,因為計算簽名的時候參數key是需要排序的。
如果複製我的OrderInfoUtil類是已經修改過的,如果複製官方Demo中的OrderInfoUtil類需要註意一下。
/**
* 生成訂單參數Map,這個Key一定要排序,例如b開頭的key一定要寫在c開頭的key前面
* @param payInfo
* @returns
*/
static buildOrderParamMap(payInfo:PayInfo): Map<string, string> {
const keyValues = new Map<string, string>()
keyValues.set('app_id', payInfo.appId);
// 商戶網站唯一訂單號
let orderId =payInfo.orderId;
if(orderId == undefined || orderId==''){
orderId = util.generateRandomUUID(true);
}
// 不能包含中文,否則加密會有問題。。。。。。。。。。。。
keyValues.set('biz_content', "{\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\""+
payInfo.amount+"\",\"subject\":\""+payInfo.productName+"\",\"body\":\""+
payInfo.productName+"\",\"out_trade_no\":\"" + orderId + "\"}");
keyValues.set('charset', 'utf-8');
keyValues.set('method', 'alipay.trade.app.pay');
keyValues.set('notify_url',payInfo.notifyUrl);//支付成功後,支付寶會訪問這個通知URL
keyValues.set('sign_type', 'RSA2');
keyValues.set('timestamp', '2016-07-29 16:55:53');
keyValues.set('version', '1.0');
return keyValues;
}
源碼下載
如果您想第一時間看我的後期文章,掃碼關註公眾號
安輝編程筆記 - 開發技術分享
掃描二維碼加關註