dotwallet
Version:
A DotWallet helper library
159 lines (146 loc) • 5.8 kB
text/typescript
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}