Integrate with Slope Wallet (Mobile)
- 1.Mobile applications and wallets are pulling up and passing references to each other using the URL scheme method.
- 2.If the android device cannot pull up the other applications, you need to add the package name of the other applications to your AndroidManifest.xml.
<queries>
<package android:name="com.xxx.yyy" />
</queries>
Reference format
slopewallet://wallet.slope/pay?returnSchemes=slopedapp://slope.dapp/pay?
slopePayReturn&slopePayParams={type: connect}
Formatted for post-transfer
slopewallet://wallet.slope/pay?
returnSchemes=736c6f7065646170703a2f2f736c6f70652e646170702f7061793f736c6f706550617952657475726e&slopePayParams=7b2274797065223a22636f6e6e656374227d
Description of parameters
Parameter | Data Type | Necessary | Formatting | Description |
---|---|---|---|---|
slopewallet://wallet.slope | String | Yes | N/A | Schema Protocol |
returnSchemes | String | Yes | utf8+hex | Callbacks to scheme protocols, i.e. business-defined scheme protocols |
slopePayParams | String | Yes | utf8+hex | Requires parameter |
Description of the slopePayParams structure
Parameter | Data type | Necessary | Description |
---|---|---|---|
type | String | Yes | pay: indicates payment connect: indicates a connection |
Return the public key address to mobile applications
slopedapp://slope.dapp/pay?
slopePayReturn=C4qGi2aeQ67GGSKcArKucxociBemWfpKCedQLuzau1M2&type=connect&error={code:200,message: testing mark}
Reference format
slopewallet://wallet.slope/pay?returnSchemes=slopedapp://slope.dapp/pay?slopePayReturn&slopePayParams=
{
type: pay,
address: DYZFDHyCs5XxjyJ6KYAk3o7q1dhhiuZYaj3Ye4aTtR4r,
memo:000001
amount: 0.001,
symbol: SOL,
label: testing notes,
message: testing mark
}
Formatted for post-transfer
slopewallet://wallet.slope/pay?
returnSchemes=736c6f7065646170703a2f2f736c6f70652e646170702f7061793f736c6f706550617952657475726e&slopePayParams=7b2274797065223a22706179222c2261646472657373223a2244595a4644487943733558786a794a364b59416b336f37713164686869755a59616a33596534615474523472222c22616d6f756e74223a22302e303031222c2273706c2d746f6b656e223a2245506a465764643541756671535371654d32714e31787a7962617043384734774547476b5a77795444743176222c226c6162656c223a224d69636861656c222c226d657373616765223a225468616e6b7320796f7572efbc81222c226d656d6f223a226f72646572303031227d
Description of parameters
Parameter | Data type | Necessary | Formatting | Description |
---|---|---|---|---|
slopewallet://wallet.slope | String | Yes | N/A | Schema protocal |
returnSchemes | String | Yes | utf8+hex | Callbacks to scheme protocols, i.e. business-defined scheme protocols |
slopePayParams | String | Yes | utf8+hex | Requires parameter |
Description of slopePayParams structure
Parameter | Data type | Necessary | Description |
---|---|---|---|
type | String | Yes | pay: indicates payment connect: indicates a connection |
address | String | Yes | Receiver's wallet address |
memo | String | Yes | Order numbers, generated and managed by the mobile application itself |
amount | String | Yes | Payment amount |
symbol | String | Yes | Token symbol, may be empty if token is SOL |
label | String | No | Title |
message | String | No | Content |
Mobile application transaction request code example
String _strWalletSchemeUrl =
'slopewallet://wallet.slope/pay?returnSchemes=';
String _strMySchemeUrl = 'slopedapp://slope.dapp/pay?slopePayReturn';
void _send({Type type = Type.pay}) {
if (_adrsCtrl.text.isEmpty || _amountCtrl.text.isEmpty) return;
Map<String, dynamic> params = Map();
params['type'] = (Type.pay == type) ? 'pay' : 'connect';
if (Type.pay == type) {
params['address'] = _adrsCtrl.text;
params['amount'] = _amountCtrl.text;
params['memo'] = _memoCtrl.text;
if (_symbolCtrl.text.isNotEmpty) params['symbol'] = _symbolCtrl.text;
if (_titleCtrl.text.isNotEmpty) params['label'] = _titleCtrl.text;
if (_msgCtrl.text.isNotEmpty) params['message'] = _msgCtrl.text;
}
String strEnParams = convert.jsonEncode(params);
String strCovertParams = _covertString(strInput: strEnParams);
String strMyEncodeScheme = _covertString(strInput: _strMySchemeUrl);
String strDecodeParam = Uri.encodeComponent(strCovertParams);
_strSendScheme = _strWalletSchemeUrl +
strMyEncodeScheme +
'&slopePayParams=' +
strDecodeParam;
_launchURL(context, _strSendScheme);
}
Wallet transaction signature code example
String baseUrl = 'slopewallet://wallet.slope/pay?';
String oriUrl = uri?.toString().toLowerCase() ?? '';
if (false == oriUrl.startsWith(baseUrl)) return;
// prase scheme
String? strRetScheme = uri?.queryParameters['returnSchemes'];
if (null == strRetScheme || strRetScheme is! String) return;
if (strRetScheme.isEmpty) return;
var decodeScheme = hex.decode(strRetScheme);
var strScheme = utf8.decode(decodeScheme);
strRetScheme = strScheme.toString();
// prase params
String? strOriParam = uri?.queryParameters['slopePayParams'];
if (null == strOriParam || strOriParam is! String) return;
String strOriParamCom = Uri.decodeComponent(strOriParam);
var decode = hex.decode(strOriParamCom);
var strParam = utf8.decode(decode);
logger.d('pay param:$strParam');
var json = convert.jsonDecode(strParam);
SchemeModel model = SchemeModel.fromJson(json);
WalletEntity? wallet = context.read<WalletMainModel>().currentWallet;
if (null == wallet) return;
model.urlScheme = strRetScheme;
Once the mobile applications pulls up the wallet and sends the transaction information, it indicates that the user has allowed the native wallet application to sign and send the transaction to the chain.
dynamic siginTx = await WalletMainModel().approve(
privateKey: prKey,
sourceAddress: coinFind.splAddress,
sendAddress: model.address,
mintAddressSend: mintAddress,
amount: model.amount.toString(),
);
if (siginTx is String && siginTx.isEmpty) {
if (showing) Navigator.pop(context);
logger.d('Token no exist $siginTx');
return;
}
String strRet = await WalletMainModel().push(siginTx);
String strScheme =
model.urlScheme + '=$strRet' + '&type=${model.type, model.memo}';
slopedapp://slope.dapp/pay?
slopePayReturn=3U4AKtoCbUhEyBjN16aFUBgj6KRp84uJ7RS9DxHzjSeUj2bbSx8WvEqQN7DhL7JLhCSyiAZYD5QSzdtZj4CiGijv&type=pay&error={code: 80000000,message: SUCCESS.}
Parameter | Data type | Necessary | Formatting | Description |
---|---|---|---|---|
slopePayReturn | String | Yes | N/A | TxSignature returned on the push-to-chain structure for the query result as a string |
type | String | Yes | N/A | pay: indicates payment connect: indicates a connection |
error | String | No | N/A | A json string of the map structure, where the user represents the result of the operation |
error code | error message |
---|---|
80000000 | SUCCESS. |
80000001 | Unknown error. |
80000002 | Slope Wallet is not installed. |
80000003 | Slope Wallet app version is too low. |
80000004 | Insufficient account balance. |
80000005 | Token account is not created. |
80000006 | Unconfirmed transaction. |
80000007 | Transaction failed. |