UPI COLLECT


Request Details

Parameter NameData TypeMandatoryDescription
merchantOrderIdStringyesUnique order ID generated by merchant
amountlongyesAmount of order in Paisa
contraintsList<InstrumentConstraint>yesDifferent type of constraints that must be applied to the payment
VPAStringYesVPA against which collect request need to be raised
Sample Request for Upi Collect Pay Via Phone Number
public async Task<IActionResult> CustomPay()
    {
        var merchantOrderID = $"Order_{DateTime.UtcNow:yyyyMMddHHmmssfff}";

        var metaInfo = MetaInfo.Builder()
                .SetUdf1("xyz")
                .Build();

        var payRequest = PgPaymentRequest.UpiCollectPayViaPhoneNumberRequestBuilder()
        .SetMerchantOrderId(merchantOrderID)
        .SetAmount(100)
        .SetPhoneNumber("9876543210")
        .SetMetaInfo(metaInfo)
        .SetExpireAfter(300)
        .Build();

        _logger.LogInformation("Custom Pay Request:\n{Request}", JsonSerializer.Serialize(payRequest, JsonOptions.IndentedWithRelaxedEscaping));
        try
        {
            var response = await _customCheckoutClient.Pay(payRequest);
            _logger.LogInformation("Custom Pay Response:\n{Response}", JsonSerializer.Serialize(response, JsonOptions.IndentedWithRelaxedEscaping));
            return Ok(response);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Custom Pay API Failed");
            return StatusCode(500, new { message = ex.Message });
        }
    }
Upi Collect Pay Via VPA
public async Task<IActionResult> CustomPay()
    {
        var merchantOrderID = $"Order_{DateTime.UtcNow:yyyyMMddHHmmssfff}";

        var metaInfo = MetaInfo.Builder()
                .SetUdf1("xyz")
                .Build();

       var payRequest = PgPaymentRequest.UpiCollectPayViaVpaRequestBuilder()
       .SetMerchantOrderId(merchantOrderID)
       .SetAmount(100)
       .SetVpa("test@upi")
       .SetMetaInfo(metaInfo)
       .SetExpireAfter(300)
       .SetMessage("Test UPI Collect")
       .Build();


        _logger.LogInformation("Custom Pay Request:\n{Request}", JsonSerializer.Serialize(payRequest, JsonOptions.IndentedWithRelaxedEscaping));
        try
        {
            var response = await _customCheckoutClient.Pay(payRequest);
            _logger.LogInformation("Custom Pay Response:\n{Response}", JsonSerializer.Serialize(response, JsonOptions.IndentedWithRelaxedEscaping));
            return Ok(response);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Custom Pay API Failed");
            return StatusCode(500, new { message = ex.Message });
        }
    }

The function will raise the collect request to the above mentioned vpa.

Response Details

PropertyTypeDescription
orderIdStringOrder Id created by PhonePe
stateStringState of the order. Initially it will be PENDING.
expireAtLongOrder expire date in epoch
Is this article helpful?