UNPKG

dotwallet

Version:
159 lines (146 loc) 5.8 kB
import {DWMerchant} from './dwMerchant' import {DWError, DotWalletResult, Vout, MircoOrderInformation} from './dwCom' import * as WebRequest from 'web-request'; interface AccessToken{ access_token:string; expires_in:number; refresh_token:string; } enum MicroPaymentStatus{ NO = 0, YES = 1 } interface TokenStatus{ status:number; expire_time:number; } interface UserInformation{ user_open_id:string; user_name:string; user_avatar:string; user_address:string; pay_status:MicroPaymentStatus; pre_amount:number; total_amount:number; } class DWUser { public m_merchant:DWMerchant; public m_accessCode:AccessToken; public m_userInfo:UserInformation; public m_userName:string; constructor(merchant:DWMerchant, userName:string){ this.m_merchant = merchant; this.m_userName = userName; } public async GetAccessCode(code:string):Promise<AccessToken>{ const accessTokenURL = new URL( "openapi/access_token", DWMerchant.DotWalletOpenURL); const rsp = await WebRequest.post(accessTokenURL.href,{ timeout:this.m_merchant.m_timeout, headers:{ 'Content-Type': 'application/json', } },JSON.stringify({ app_id:this.m_merchant.m_appID, secret:this.m_merchant.m_secret, code:code })); const result = <DotWalletResult>JSON.parse(rsp.content); if (result.code != 0){ throw new DWError(result.code, result.msg); } this.m_accessCode = <AccessToken>result.data; return this.m_accessCode; } public async RefreshAccessToken(){ //todo refresh_access_token method get const refreshTokenURL = new URL( "openapi/refresh_access_token", DWMerchant.DotWalletOpenURL); refreshTokenURL.searchParams.append('app_id', this.m_merchant.m_appID); refreshTokenURL.searchParams.append('refresh_token', this.m_accessCode.refresh_token); const rsp =await WebRequest.get(refreshTokenURL.href,{ timeout:this.m_merchant.m_timeout, }); const result = <DotWalletResult>JSON.parse(rsp.content); if (result.code != 0){ throw new DWError(result.code, result.msg); } this.m_accessCode = <AccessToken>result.data; } public async GetUserInfo():Promise<UserInformation>{ const getURL = new URL( "openapi/get_user_info", DWMerchant.DotWalletOpenURL); getURL.searchParams.append('access_token', this.m_accessCode.access_token); const rsp = await WebRequest.get(getURL.href,{ timeout:this.m_merchant.m_timeout, }); const result = <DotWalletResult>JSON.parse(rsp.content); if (result.code != 0){ throw new DWError(result.code, result.msg); } this.m_userInfo = <UserInformation>result.data; return this.m_userInfo; } public async CheckAccessToken():Promise<TokenStatus>{ const getURL = new URL( "openapi/check_access_token", DWMerchant.DotWalletOpenURL); getURL.searchParams.append('access_token', this.m_accessCode.access_token); const rsp = await WebRequest.get(getURL.href,{ timeout:this.m_merchant.m_timeout, }); const result = <DotWalletResult>JSON.parse(rsp.content); if (result.code != 0){ throw new DWError(result.code, result.msg); } return <TokenStatus>result.data; }; public async CreateMircoOrder(orderSN:string, payAmount:number, opreturnHex:string, receiveAddress:string|undefined):Promise<DotWalletResult>{ let recvMuti:Vout[] = [{ address:receiveAddress, amount:payAmount }]; return this.CreateMircoOrderMuti(orderSN, payAmount, opreturnHex, recvMuti); } public async CreateMircoOrderMuti(orderSN:string, payAmount:number, opreturnHex:string,receiveMuti:Vout[]):Promise<DotWalletResult>{ const orderURL = new URL( "openapi/pay_small_money", DWMerchant.DotWalletOpenURL); const rsp = await WebRequest.post(orderURL.href,{ timeout:this.m_merchant.m_timeout, headers:{ 'Content-Type': 'application/json', } },JSON.stringify({ app_id:this.m_merchant.m_appID, secret:this.m_merchant.m_secret, merchant_order_sn:orderSN, item_name:this.m_merchant.m_merchantName, pre_amount:payAmount.toString(), user_open_id:this.m_userInfo.user_open_id, opreturn:opreturnHex, receive_address:receiveMuti, })); const result = <DotWalletResult>JSON.parse(rsp.content); if (result.code != 0){ throw new DWError(result.code, result.msg); } let rst:DotWalletResult = <DotWalletResult>result.data; return rst; } public async SignMessage(message:string):Promise<DotWalletResult>{ const orderURL = new URL( "openapi/sign_message", DWMerchant.DotWalletOpenURL); const rsp = await WebRequest.post(orderURL.href,{ timeout:this.m_merchant.m_timeout, headers:{ 'Content-Type': 'application/json', } },JSON.stringify({ app_id:this.m_merchant.m_appID, secret:this.m_merchant.m_secret, user_open_id:this.m_userInfo.user_open_id, money_type:'BSV', message:message })); const result = <DotWalletResult>JSON.parse(rsp.content); if (result.code != 0){ throw new DWError(result.code, result.msg); } let rst:DotWalletResult = <DotWalletResult>result.data; return rst; } } export {DWUser}