YooMoney API
Old versions of the API
Help
Sign up for YooMoney
Usage examples for financial transactions

This is an old version of the API. Switch to the YooMoney API.

You can view examples of completing active financial transactions:
To work with these methods, you must create a private key (contact the account manager for instructions).
returnPayment
PHP
/**
 * Refunds a successful transfer to the Payer's account.
 * @param string|int $invoiceId transaction number of the transfer being refunded
 * @param string $amount amount to refund to the Payer's account
 * @return string response from YooMoney in XML format
 */
public function returnPayment($invoiceId, $amount) {
    $methodName = "returnPayment";
    $this->log->info("Start " . $methodName);
    $dateTime = Utils::formatDate(new \DateTime()) ;
    $requestParams = array(
        'clientOrderId' => mktime(),
        'requestDT' => $dateTime,
        'invoiceId' => $invoiceId,
        'shopId' => $this->settings->SHOP_ID,
        'amount' => number_format($amount, 2),
        'currency' => $this->settings->CURRENCY,
        'cause' => 'No product'
    );
    $result = $this->sendXmlRequest($methodName, $requestParams);
    $this->log->info($result);
    return $result;
}
confirmPayment
PHP
/**
 * Completes a successful transfer to the merchant's account. Used for deferred transfers.
 * @param string|int $orderId transaction number of the transfer being confirmed
 * @param string $amount amount to transfer
 * @return string response from YooMoney in XML format
 */
public function confirmPayment($orderId, $amount) {
    $methodName = "confirmPayment";
    $this->log->info("Start " . $methodName);
    $dateTime = Utils::formatDate(new \DateTime()) ;
    $requestParams = array(
        'clientOrderId' => mktime(),
        'requestDT' => $dateTime,
        'orderId' => $orderId,
        'amount' => $amount,
        'currency' => 'RUB'
    );
    $result = $this->sendUrlEncodedRequest($methodName, $requestParams);
    $this->log->info($result);
    return $result;
}
cancelPayment
PHP
/**
 * Cancels a deferred payment.
 * @param string|int $orderId transaction number of the deferred payment
 * @return string response from YooMoney in XML format
 */
public function cancelPayment($orderId) {
    $methodName = "cancelPayment";
    $this->log->info("Start " . $methodName);
    $dateTime = Utils::formatDate(new \DateTime()) ;
    $requestParams = array(
        'requestDT' => $dateTime,
        'orderId' => $orderId
    );
    $result = $this->sendUrlEncodedRequest($methodName, $requestParams);
    $this->log->info($result);
    return $result;
}
repeatCardPayment
PHP
/**
 * Repeats a payment using the Payer's card data (with the Payer's consent) to pay for the store's
 * products or services.
 * @param string|int $invoiceId transaction number of the transfer being repeated.
 * @param string $amount amount to make the payment
 * @return string response from YooMoney in XML format
 */
public function repeatCardPayment($invoiceId, $amount) {
    $methodName = "repeatCardPayment";
    $this->log->info("Start " . $methodName);
    $requestParams = array(
        'clientOrderId' => mktime(),
        'invoiceId' => $invoiceId,
        'amount' => $amount
    );
    $result = $this->sendUrlEncodedRequest($methodName, $requestParams);
    $this->log->info($result);
    return $result;
}
Request signature
PHP
private function signData($data) {
    $descriptorspec = array(
        0 => array("pipe", "r"),
        1 => array("pipe", "w"),
    );
    $descriptorspec[2] = $descriptorspec[1];
    try {
        $opensslCommand = 'openssl smime -sign -signer ' . $this->settings->mws_cert .
            ' -inkey ' . $this->settings->mws_private_key .
            ' -nochain -nocerts -outform PEM -nodetach -passin pass:'.$this->settings->mws_cert_password;
        $this->log->info("opensslCommand: " . $opensslCommand);
        $process = proc_open($opensslCommand, $descriptorspec, $pipes);
        if (is_resource($process)) {
            fwrite($pipes[0], $data);
            fclose($pipes[0]);
            $pkcs7 = stream_get_contents($pipes[1]);
            $this->log->info($pkcs7);
            fclose($pipes[1]);
            $resCode = proc_close($process);
            if ($resCode != 0) {
                $errorMsg = 'OpenSSL call failed:' . $resCode . '\n' . $pkcs7;
                $this->log->info($errorMsg);
                throw new \Exception($errorMsg);
            }
            return $pkcs7;
        }
    } catch (\Exception $e) {
        $this->log->info($e);
        throw $e;
    }
}
See also
Financial transactions Request to refund a successful transfer Request to confirm a deferred payment Request to cancel a deferred payment Request to repeat a bank card payment