PhonePe payments built directly into your repair workflow
No opening payment apps, calculating balances, or updating invoices by hand. Collect UPI, QR, PhonePe Collect and card payments straight from every repair job — the invoice reconciles itself.
✓ Paid
The old way vs BytePhase
The same payment — one path is full of hand-offs and mistakes, the other is one tap.
Collect a payment in one flow
Pick how the customer pays — the steps below update the moment you choose.
→
→
OR
OR
/* —- global connector / pulse animations (apply page-wide, incl. hero card + verification chain) —- */
@keyframes bpx-dotdown{0%{top:-6px;opacity:0}18%{opacity:1}82%{opacity:1}100%{top:100%;opacity:0}}
@keyframes bpx-dotright{0%{left:-6px;opacity:0}18%{opacity:1}82%{opacity:1}100%{left:100%;opacity:0}}
@keyframes bpx-ring{0%{transform:translate(-50%,-50%) scale(.6);opacity:.7}100%{transform:translate(-50%,-50%) scale(2.6);opacity:0}}
.bpx-vconn{position:relative;width:2px;height:22px;margin:3px auto;border-radius:2px;background:#E7DCF6;overflow:visible}
.bpx-vconn::after{content:””;position:absolute;left:50%;top:0;width:7px;height:7px;margin-left:-3.5px;border-radius:50%;background:#5F259F;box-shadow:0 0 0 3px rgba(95,37,159,.16);animation:bpx-dotdown 1.7s linear infinite}
.bpx-hconn{position:relative;flex:none;align-self:center;width:30px;height:2px;border-radius:2px;background:#E7DCF6;overflow:visible}
.bpx-hconn::after{content:””;position:absolute;top:50%;left:0;width:7px;height:7px;margin-top:-3.5px;border-radius:50%;background:#5F259F;box-shadow:0 0 0 3px rgba(95,37,159,.16);animation:bpx-dotright 1.6s linear infinite}
.bpx-hconn.d{background:rgba(245,184,0,.32)}
.bpx-hconn.d::after{background:#F5B800;box-shadow:0 0 0 3px rgba(245,184,0,.22)}
.bpx-pulse{position:relative}
.bpx-pulse::after{content:””;position:absolute;left:50%;top:50%;width:100%;height:100%;border-radius:50%;background:currentColor;animation:bpx-ring 1.6s ease-out infinite}
@media(prefers-reduced-motion:reduce){.bpx-vconn::after,.bpx-hconn::after,.bpx-pulse::after,.ppm-conn i{animation:none}}
#bp-ppm{max-width:none;width:100%;margin:0 auto;font-family:inherit}
#bp-ppm *{box-sizing:border-box}
#bp-ppm svg{display:block;width:22px;height:22px}
.ppm-steps{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin-bottom:28px}
.ppm-step{display:inline-flex;align-items:center;gap:9px;background:#fff;border:1px solid #ECE6F6;border-radius:14px;padding:12px 18px;font-size:15px;font-weight:700;color:#1A1533;box-shadow:0 8px 20px -14px rgba(70,40,120,.5)}
.ppm-step .ppm-ic{font-size:15px}
.ppm-n{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;background:#F0E8FB;color:#5F259F;font-size:13px;font-weight:800}
.ppm-dark{background:#17122E;color:#fff;border-color:#17122E}
.ppm-gold{background:#F5B800;color:#17122E}
.ppm-lil{background:#F3ECFC;border-color:#E6D9F8;color:#5F259F}
.ppm-p{background:#5F259F;color:#fff}
.ppm-dn{color:#5F259F;font-weight:800}
.ppm-arr{color:#C9BEE6;font-weight:700}
.ppm-cards{display:flex;align-items:stretch;gap:0;margin-bottom:24px}
.ppm-card{position:relative;flex:1;background:#fff;border:1.5px solid #ECE6F6;border-radius:20px;padding:22px;text-align:left;cursor:pointer;transition:border-color .18s,box-shadow .18s;min-width:0;font-family:inherit}
.ppm-card:hover{border-color:#D9C7F2}
.ppm-card.active{border-color:#5F259F;box-shadow:0 18px 44px -24px rgba(95,37,159,.6)}
.ppm-chip{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:14px;margin-bottom:14px}
.ppm-chip svg{width:24px;height:24px}
.ppm-cname{display:block;font-size:19px;font-weight:800;color:#1A1533;line-height:1.2}
.ppm-csub{display:block;font-size:13.5px;color:#8A85A0;margin-top:3px}
.ppm-dot{position:absolute;top:18px;right:18px;width:11px;height:11px;border-radius:50%;background:#E4DCF3}
.ppm-card.active .ppm-dot{background:#5F259F;box-shadow:0 0 0 4px rgba(95,37,159,.16)}
.ppm-or{z-index:2;flex:none;align-self:center;margin:0 -15px;display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:#5F259F;color:#fff;font-size:12px;font-weight:800;letter-spacing:.02em;box-shadow:0 8px 18px -6px rgba(95,37,159,.75)}
.ppm-panel{background:#fff;border:1px solid #ECE6F6;border-radius:24px;padding:26px;box-shadow:0 34px 64px -44px rgba(70,40,120,.55)}
.ppm-phead{display:flex;align-items:center;gap:14px;margin-bottom:22px}
.ppm-pchip{flex:none;display:inline-flex;align-items:center;justify-content:center;width:50px;height:50px;border-radius:14px}
.ppm-pchip svg{width:24px;height:24px}
.ppm-ptitle{font-size:22px;font-weight:800;color:#1A1533;line-height:1.2}
.ppm-psub{font-size:14px;color:#8A85A0;margin-top:2px}
.ppm-flow{display:flex;align-items:stretch}
.ppm-fstep{flex:1;background:#FBFAFE;border:1px solid #EFEAF8;border-radius:16px;padding:16px 10px;text-align:center;min-width:0}
.ppm-fstep.done{background:#F1FBF4;border-color:#CDEED9}
.ppm-fic{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:12px;background:#fff;border:1px solid #EEE9F7;color:#5F259F;margin:0 auto 11px}
.ppm-fstep.done .ppm-fic{border-color:#CDEED9;color:#16A34A}
.ppm-flabel{font-size:12.5px;font-weight:700;color:#1A1533;line-height:1.3}
.ppm-conn{flex:none;align-self:center;width:30px;height:2px;border-radius:2px;background:#E7DCF6;position:relative;overflow:visible}
.ppm-conn i{position:absolute;top:50%;left:0;width:7px;height:7px;margin-top:-3.5px;border-radius:50%;background:#5F259F;box-shadow:0 0 0 3px rgba(95,37,159,.16);display:block;animation:bpx-dotright 1.6s linear infinite}
@media(max-width:860px){
.ppm-cards{flex-direction:column;gap:14px}
.ppm-or{margin:-8px 0}
.ppm-flow{flex-direction:column;gap:10px}
.ppm-fstep{display:flex;align-items:center;gap:12px;text-align:left;padding:13px 15px}
.ppm-fic{margin:0}
.ppm-conn{width:40px;height:2px;margin:6px auto}
}
(function(){
var root=document.getElementById(‘bp-ppm’); if(!root||root.dataset.on)return; root.dataset.on=’1′;
var I={
person:”,
bell:”,
phone:”,
bolt:”,
doc:”,
receipt:”,
cash:”,
qr:”,
link:”,
check:”,
card:”,
lock:”
};
var F={
collect:{title:’PhonePe Collect’,sub:’Best for remote & advance payments’,chip:’phone’,bg:’#F0E8FB’,fg:’#5F259F’,
steps:[[‘person’,’Enter customer mobile’],[‘bell’,’Collect request sent’],[‘phone’,’Customer approves in PhonePe’],[‘link’,’BytePhase gets callback’],[‘doc’,’Invoice updated’],[‘receipt’,’Receipt sent’]]},
qr:{title:’Dynamic QR’,sub:’Ideal at the counter’,chip:’qr’,bg:’#FEF3C7′,fg:’#B45309′,
steps:[[‘cash’,’Job amount ready’],[‘qr’,’QR generated’],[‘phone’,’Customer scans’],[‘bolt’,’Pays in any UPI app’],[‘link’,’Callback received’],[‘check’,’Invoice paid’]]},
card:{title:’PhonePe Card Machine’,sub:’PhonePe card machine at the desk’,chip:’card’,bg:’#E7E9FD’,fg:’#4F46E5′,
steps:[[‘card’,’Push bill to terminal’],[‘card’,’Customer taps / inserts card’],[‘lock’,’PhonePe terminal processes’],[‘check’,’Payment success’],[‘link’,’BytePhase callback’],[‘receipt’,’Invoice marked paid’]]}
};
var cards=root.querySelectorAll(‘.ppm-card’),
flow=root.querySelector(‘.ppm-flow’),
pt=root.querySelector(‘.ppm-ptitle’), ps=root.querySelector(‘.ppm-psub’), pc=root.querySelector(‘.ppm-pchip’);
function render(m){
var d=F[m]; pt.textContent=d.title; ps.textContent=d.sub;
pc.style.background=d.bg; pc.style.color=d.fg; pc.innerHTML=I[d.chip];
var h=”,n=d.steps.length;
d.steps.forEach(function(s,i){
h+=’
‘;
if(i
});
flow.innerHTML=h;
cards.forEach(function(c){ c.classList.toggle(‘active’, c.getAttribute(‘data-m’)===m); });
}
cards.forEach(function(c){ c.addEventListener(‘click’,function(){ render(c.getAttribute(‘data-m’)); }); });
render(‘collect’);
})();
One integration, every payment option
How BytePhase knows a payment succeeded
The confirmation comes from PhonePe itself — not from a screenshot or a manual check.
One payment success, eight things updated
The moment PhonePe confirms, BytePhase fans the result out across your whole system — no “mark as paid”, no re-keying.
Four everyday repair-shop scenarios
What repair shops get
PhonePe integration FAQ
No. Job-linked QR codes work with any UPI app — Google Pay, Paytm, BHIM or PhonePe. Only Collect requests are delivered inside the PhonePe app, which is why QR is the catch-all option.
A collect request stays open for up to 30 days, so a request sent when a device is booked in can still be paid on pickup. You can cancel or re-send it any time.
Straight to your own settlement account. BytePhase is the workflow layer — PhonePe settles rupees to you exactly as it would for any merchant.
Yes. Add your Store ID, register each PhonePe card machine, and staff can push the exact bill to a named terminal (e.g. Front Desk) so the customer just taps or swipes.
Yes — that is the whole point. A successful payment posts straight back into BytePhase: the paid amount, the balance, the status, the ledger and the technician view all stay in sync with no “mark as paid”.
The Collect Payments (UPI/QR) view is your single window on money in motion — pending, paid, expired or cancelled — plus totals like “Collected this month” at a glance.
Yes. Payment Links are generic one-off links. This integration is tied to the repair job, so the amount is pre-filled and the result reconciles back to that specific invoice automatically.
Yes. It slots into the normal BytePhase repair workflow and works alongside GST invoicing — book device, repair, invoice, collect — in one flow.
