with Zoho Expense and OpenSRS?
Activate when an expense report approval takes place. See the Documentation
Emit new event when the DNS/ZONE check has passed or failed at the registry. See the documentation
Activate when an expense report submission takes place. See the Documentation
Emit new event for each new domain registration. See the documentation
Emit new event when the status of a domain transfer changes. See the documentation
Generate a new expense entry in the Zoho Expense system. See the Documentation
Initiate a domain transfer to OpenSRS. See the documentation
Disapprove a pending travel request in the system. See the Documentation
Alter details in an existing expense report. See the Documentation
The Zoho Expense API allows for streamlined management of expense reporting and tracking. With Pipedream, you can automate various tasks like submitting expenses, approving reports, or syncing expense data with other accounting tools. Pipedream's serverless platform enables you to create workflows that react to new expense submissions, scheduled report generation, and much more, without the hassle of managing infrastructure.
import { axios } from "@pipedream/platform"
export default defineComponent({
props: {
zoho_expense: {
type: "app",
app: "zoho_expense",
}
},
async run({steps, $}) {
return await axios($, {
url: `${this.zoho_expense.$auth.api_domain}/expense/v1/organizations`,
headers: {
"Authorization": `Zoho-oauthtoken ${this.zoho_expense.$auth.oauth_access_token}`,
},
})
},
})
import { axios } from "@pipedream/platform";
import crypto from 'crypto';
export default defineComponent({
props: {
opensrs: {
type: "app",
app: "opensrs",
}
},
async run({steps, $}) {
const connectionDetails = {
reseller_username: this.opensrs.$auth.reseller_username,
api_key: this.opensrs.$auth.api_key,
api_host_port: this.opensrs.$auth.api_host_port
};
//Payload of the request
const xml = `<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
<OPS_envelope>
<header>
<version>0.9</version>
</header>
<body>
<data_block>
<dt_assoc>
<item key="protocol">XCP</item>
<item key="action">LOOKUP</item>
<item key="object">DOMAIN</item>
<item key="attributes">
<dt_assoc>
<item key="domain">${this.opensrs.$auth.domain}</item>
</dt_assoc>
</item>
</dt_assoc>
</data_block>
</body>
</OPS_envelope>`;
// Generate signature
const generateSignature = (xml, apiKey) => {
let md5 = crypto.createHash('md5');
md5.update(xml + apiKey);
let firstHash = md5.digest('hex');
md5 = crypto.createHash('md5');
md5.update(firstHash + apiKey);
return md5.digest('hex');
};
const signature = generateSignature(xml, connectionDetails.api_key);
// Prepare and call OpenSRS API
const headers = {
'Content-Type': 'text/xml',
'X-Username': connectionDetails.reseller_username,
'X-Signature': signature
};
return await axios($, {
method: "POST",
url: connectionDetails.api_host_port,
headers,
data: xml
});
},
})