付款、发票和交易
客户交易
系统中任何需要花费金钱的内容都被记录为客户的交易。
每笔交易都有批发成本和零售成本的货币金额,以及交易的描述。
交易可以由系统自动生成,例如,当服务被提供时,会为设置费用创建一笔交易,当服务被计费时,会为零售成本创建一笔交易。
交易也可以手动创建,例如,如果客户获得了信用额度,则会为信用额度创建一笔交易,或者收取安装费用时,会为安装费用创建一笔交易。
交易被组合在一起形成 发票 <payments_invoices>,并发送给客户进行付款。

访问交易
交易可以在系统级别或按客户查看:
按客户查看:
- 导航到 客户 → [选择客户]
- 点击 计费 标签
- 在第一个卡片中查看交易列表
系统范围查看:
- 导航到 计费 → 交易(从主菜单)
- 查看所有客户的所有交易
交易统计小部件
在交易页面顶部,四个统计���片显示财务摘要:

小部件描述:
- 总交易数 - 所有交易的零售成本总和(所有时间)
- 总未开票交易 - 尚未包含在发票中的交易总和
- 本月总交易数 - 本日历月创建的交易总和
- 上月总交易数 - 上日历月创建的交易总和
值格式化:
- 超过1,000的值:显示为“k”后缀(例如,$1.5k)
- 超过1,000,000的值:显示为“M”后缀(例如,$2.3M)
- 超过1,000,000,000的值:显示为“B”后缀(例如,$1.1B)
交易列表
交易表显示所有交易,包含以下列:
列描述:
- ID - 唯一交易ID
- 日期 - 交易创建日期
- 标题 - 简短交易名称
- 描述 - 交易的详细描述
- 金额 - 零售成本(收费为正,信用为负)
- 发票 - 如果交易已开票,则为发票ID(可点击链接)
- 状态 - 如果已开票则为勾选标记,未开票则为破折号
每行操作:
每行都有一个操作菜单(⋮),选项包括:
- 查看详情 - 打开交易详情模态框
- 下载发票PDF - 下载PDF(仅在已开票时)
- 作废交易 - 将交易标记为作废(仅在未开票时)
交易类型
交易分为两大类:
借记交易(收费)
正金额,增加客户应付余额:
- 服务设置费用 - 提供服务时的一次性收费
- 月度服务费用 - 服务的定期收费
- 安装费用 - 现场技术人员访问的收费
- 设备费用 - 调制解调器、路由器、SIM卡的收费
- 逾期付款费用 - 逾期发票的罚款
- 手动收费 - 员工添加的自定义收费
信用交易(付款/退款)
负金额,减少客户应付余额:
- 现金付款 - 客户以现金支付
- 卡付款 - 客户以信用卡/借记卡支付
- 银行转账付款 - 客户通过银行转账支付
- 账户信用 - 善意信用,补偿
- 退款 - 退还给客户的钱
- 折扣 - 促销或忠诚度折扣
手动添加交易
点击 "+ 添加交易" 打开添加交易模态框。
借记交易(收费):

信用交易(付款/退款):

字段描述:
- 交易类型 - 选择借记(收费)或信用(付款/退款)
- 信用类型 - 如果选择信用,选择付款方式(现金、卡、银行转账)
- 标题 - 交易的简短名称(必填)
- 描述 - 详细说明(可选)
- 零售成本 - 客户支付的金额(必填,正数)
- 批发成本 - 您的成本(可选,用于利润跟踪)
- 税率 - 应用于此交易的税率(可选,默认为产品税或0%)
- 服务 - 将交易链接到特定服务(可选)
- 站点 - 将交易链接到特定站点(可选)
- 交易日期 - 交易日期(默认为今天)
验证:
- 标题和零售成本是必填项
- 零售成本必须是正数
- 如果选择了信用类型,必须选择一种信用类型
发生的事情:
- 交易在数据库中创建
- 出现在客户的交易列表中
- 包含在“未开票交易”计数中
- 可用于下次发票生成
- 创建活动日志条目
搜索和过滤交易
搜索
使用搜索栏查找交易。搜索范围包括:
- 交易ID
- 标题
- 描述
- 发票ID
过滤器
应用过滤器以缩小交易列表:
可用过滤器:
- 作废状态 - 所有、作废、未作废
- 发票状态 - 所有、已开票、未开票
过滤操作:
- 应用过滤器 - 将所选过滤器应用于列表
- 重置过滤器 - 清除所有过滤器并显示所有交易
排序
单击任何列标题进行排序:
- ID - 按交易ID排序(最新/最旧)
- 日期 - 按交易日期排序
- 标题 - 按字母顺序排序
- 金额 - 按零售成本排序(最高/最低)
- 发票 - 按发票ID排序
再次单击以反转排序方向(升序 ↔ 降序)。
作废交易
错误添加的交易可以被 作废(标记为已删除)。
要求:
- 交易必须未开票
- 一旦开票,交易不能被作废(必须退款)
如何作废:
- 在列表中找到交易
- 点击操作菜单(⋮)
- 选择 "作废交易"
- 在模态框中确认

发生的事情:
- 交易标记为
void = true - 不再出现在默认交易列表中
- 从发票生成中排除
- 可以通过过滤“作废”交易查看
- 从“未开票交易”总数中扣除
注意: 作废与退款不同。作废意味着“这笔交易本不该存在。”退款意味着“撤销一笔有效交易。”
交易的税
交易可以包括税,税是根据产品的税配置自动计算的,或者每笔交易手动指定。

税行为:
- 借记交易(收费) - 税适用于收费,基于:
- 产品税率 - 如果交易链接到产品,则自动应用产品的税率
- ��动覆盖 - 员工在创建交易时可以覆盖税率
- 税额 - 计算为:
retail_cost × (tax_percentage / 100) - 显示格式 - 在交易列表中显示为:
$10.00 (10%)
- 信用交易(付款/退款) - 信用不适用税
- 信用交易的税率字段隐藏
- 所有付款和退款的税自动设置为0%
- 信用在没有税务影响的情况下减少客户的未偿余额
税计算示例:
- 产品:移动计划,税率10%,$50.00零售成本
- 自动税计算:$50.00 × 0.10 = $5.00
- 显示:$5.00 (10%)
零税(NIL/免税):
- 通过将税率设置为0,可以使产品免税
- 如果未指定,税默认为0%
- 免税交易在税列中显示“-”

交易详情视图
单击交易以查看完整详情:
已开票与未开票交易
未开票交易:
- 尚未包含在任何发票中
- 可用于下次发票生成
- 可以作废
- 计入“未开票交易”总数
- 状态显示破折号(-)
已开票交易:
- 包含在发票中
- 不能作废(如有需要,必须退款)
- 发票ID可点击(链接到发票详情)
- 状态显示勾选标记(✓)
- 不能修改
发票生成:
当您为客户生成发票时:
- 系统查找该客��的所有未开票交易
- 可选择按日期范围过滤
- 交易包含在新发票中
- 交易
invoice_id字段填充 - 交易现在标记为“已开票”
请参见 payments_invoices 以获取发票生成的详细信息。
常见工作流程
工作流程1:因服务中断手动信用
- 客户来电:“服务中断了2天”
- 员工决定给予£10的信用
- 导航到客户 计费 标签
- 点击 "+ 添加交易"
- 选择 信用 交易类型
- 选择 现金付款 信用类型
- 输入标题:“服务中断信用”
- 输入描述:“因1月8-9日的中断补偿”
- 输入零售成本:10.00
- 从下拉菜单中选择受影响的服务
- 点击 "添加交易"
- 交易以-£10.00的金额出现
- 将在下次发票中作为信用包含
工作流程2:手动安装费用
- 现场技术人员安装服务
- 员工需要收取£75的安装费用
- 导航到客户 计费 标签
- 点击 "+ 添加交易"
- 选择 借记 交易类型
- 输入标题:“安装费用”
- 输入描述:“现场技术人员进行光纤安装”
- 输入零售成本:75.00
- 输入批发成本:45.00(可选,用于利润跟踪)
- 选择已安装的服务
- 选择安装地点
- 点击 "添加交���"
- 交易出现在未开票列表中
- 将在下次发票中包含
工作流程3:作废重复交易
- 员工注意到重复交易
- 验证交易尚未开票
- 点击重复交易的操作菜单(⋮)
- 选择 "作废交易"
- 在模态框中确认
- 交易从列表中移除
- 未开票总数相应减少
工作流程4:查找发票的交易
- 需要生成月度发票
- 点击 发票过滤器:“未开票”
- 点击 应用过滤器
- 查看所有未开票交易
- 从小部件中注意总金额
- 导航到生成发票
- 选择日期范围(例如,1月1日至31日)
- 范围内的交易包含在发票中
故障排除
无法作废交易
- 原因: 交易已开票
- 解决方案: 交易是发票历史的一部分。如果需要退款,请改为创建信用交易。
重复交易出现
- 原因: 服务多次收费或提供错误
- 解决方案: 如果未开票,请作废重复交易。如果已开票,请发放信用。
交易未出现在列表中
- 原因: 应用过滤器或交易已作废
- 解决方案: 点击“重置过滤器”以显示所有交易。要查看作废交易,请按“作废:作废”过滤。
未开票总数与预期不符
- 原因: 一些��易已开票,或作废交易被排除
- 解决方案: 应用过滤器“发票:未开票”以仅查看未开票。单独检查作废交易。
无法添加交易(客户字段禁用)
- 原因: 查看客户特定的交易页面
- 解决方案: 客户已预先选择。如果需要为不同客户添加交易,请转到系统范围的交易页面。
相关文档
payments_invoices- 发票生成和管理payments_process- 处理发票的付款basics_payment- 付款方式概述csa_activity_log- 在活动日志中查看交易历史
客户发票
交易 </payments_transaction> 被组合在一起形成发票,并发送给客户进行付款。
发票有开始和结束日期,表示发票覆盖的期间,以及到期日,表示发票到期付款的日期。

发票可以由系统自动生成,例如,当服务被计费时,会为零售成本创建发票,或者可以手动创建,例如,如果客户请求发票副本,或者如果客户因一次性收费而被计费。
客户发票完全使用 Mailjet <integrations_mailjet> 模板,可以自定义以包含公司徽标、地址和付款详情,并可以通过电子邮件发送给客户,或下载为PDF。

自定义发票模板
OmniCRM使用HTML模板和Jinja2模板生成发票。 您可以完全自定义发票设计、品牌、颜色和布局。
发票模板位置
发票模板存储在 OmniCRM-API/invoice_templates/
默认模板:
norfone_invoice_template.html- 示例发票模板cifi_invoice_template.html- 替代模板示例
配置:
活动发票模板在 OmniCRM-API/crm_config.yaml 中指定:
invoice:
template_filename: 'norfone_invoice_template.html'
可用模板变量
发票模板可以访问以下Jinja2变量:
发票信息:
{{ invoice_number }}- 唯一发票ID(例如,INV-2025-001234){{ date }}- 发票发布日期(ISO格式:2025-01-10T12:00:00){{ due_date }}- 付款到期日(例如,2025-02-10){{ start_date }}- 计费周期开始日��{{ end_date }}- 计费周期结束日期{{ total_amount }}- 税前发票总金额(数字){{ total_tax }}- 从所有交易计算的总税额(数字)
客户信息:
{{ client.name }}- 客户的全名或公司名称{{ client.address.address_line_1 }}- 地址行1{{ client.address.address_line_2 }}- 地址行2{{ client.address.city }}- 城市{{ client.address.state }}- 州/省{{ client.address.zip_code }}- 邮政编码{{ client.address.country }}- 国家
交易行项目:
使用以下方式循环遍历交易:
{% for sub_transaction in transactions %}
<tr>
<td>{{ sub_transaction.transaction_id }}</td>
<td>{{ sub_transaction.created.split("T")[0] }}</td>
<td>{{ sub_transaction.title }}</td>
<td>{{ sub_transaction.description }}</td>
<td>${{ "%.2f"|format(sub_transaction.retail_cost) }}</td>
</tr>
{% endfor %}
交易字段:
sub_transaction.transaction_id- 交易IDsub_transaction.created- 交易日期/时间sub_transaction.title- 交易标题sub_transaction.description- 详细描述sub_transaction.retail_cost- 行项目金额sub_transaction.tax_percentage- 应用的税率(例如,10表示10%)sub_transaction.tax_amount- 以美元计算的税额
在模板中显示税:
<td>
{% if sub_transaction.tax_amount and sub_transaction.tax_amount > 0 %}
${{ "%.2f"|format(sub_transaction.tax_amount) }} ({{ sub_transaction.tax_percentage }}%)
{% else %}
-
{% endif %}
</td>
创建自定义发票模板
步骤1:复制现有模板
cd OmniCRM-API/invoice_templates/
cp norfone_invoice_template.html your_company_invoice_template.html
步骤2:自定义HTML/CSS
编辑 your_company_invoice_template.html 以匹配您的品牌:
关键自定义区域:
-
公司徽标和品牌
<!-- 用您的徽标URL替换 -->

<!-- 更新公司名称 -->
<h1>您的公司名称</h1> -
配色方案
<style>
/* 主要品牌颜色 */
.navbar {
background: linear-gradient(to bottom right, #your-color-1, #your-color-2);
}
/* 表头 */
.table thead th {
background-color: #your-brand-color !important;
color: white !important;
}
/* 按钮和链接 */
.btn-primary {
background-color: #your-brand-color;
}
</style> -
公司信息页脚
<footer>
<p>您的公司名称</p>
<p>123商业街,城市,国家</p>
<p>电话:+1-555-123-4567 | 电子邮件:billing@yourcompany.com</p>
<p>ABN/税号:12345678900</p>
</footer> -
付款说明
<div class="payment-info">
<h3>付款方式</h3>
<p><strong>在线:</strong> 在 https://yourcompany.com/pay 付款</p>
<p><strong>银行转账:</strong></p>
<ul>
<li>账户名称:您的公司有限公司</li>
<li>BSB:123-456</li>
<li>账户号码:987654321</li>
<li>参考:{{ invoice_number }}</li>
</ul>
</div> -
条款和条件
<div class="terms">
<h4>付款条款</h4>
<p>发票日期后30天内到期付款。</p>
<p>逾期付款费用:逾期余额每月2%。</p>
<p>有关账单查询:billing@yourcompany.com</p>
</div>
步骤3:更新配置
编辑 OmniCRM-API/crm_config.yaml:
invoice:
template_filename: 'your_company_invoice_template.html'
步骤4:重启API
cd OmniCRM-API
sudo systemctl restart omnicrm-api
步骤5:测试发票生成
- 导航到有交易的客户
- 生成测试发票
- 下载PDF以验证格式
- 将发票通过电子邮件发送给自己以测试电子邮件发送
高级自定义
条件内容:
使用Jinja2条件语句显示/隐藏内容:
{% if total_amount > 1000 %}
<div class="high-value-notice">
<p><strong>注意:</strong> 大额余额 - 可根据请求提供付款计划。</p>
</div>
{% endif %}
{% if client.address.country == "Australia" %}
<p>包含GST:${{ "%.2f"|format(total_amount * 0.10) }}</p>
{% endif %}
多语言支持:
创建特定语言的模板:
invoice_template_en.html
invoice_template_es.html
invoice_template_fr.html
根据客户的语言偏好进行配置。
自定义计算:
<!-- 显示小计和税务明细 -->
<tr>
<td colspan="4" class="text-right"><strong>小计:</strong></td>
<td>${{ "%.2f"|format(total_amount) }}</td>
</tr>
<tr>
<td colspan="4" class="text-right"><strong>税:</strong></td>
<td>${{ "%.2f"|format(total_tax) }}</td>
</tr>
<tr>
<td colspan="4" class="text-right"><strong>总计:</strong></td>
<td>${{ "%.2f"|format(total_amount + total_tax) }}</td>
</tr>
注意: total_tax 变量是通过将发票中所有交易的 tax_amount 相加自动计算的。每笔交易的税是根据其 tax_percentage 字段计算的,默认为产品的 tax_percentage 或0%(如果未指定)。
付款的二维码:
生成用于移动支付的二维码:
<div class="qr-payment">

<p>用您的手机扫描以立即付款</p>
</div>
PDF样式最佳实践
OmniCRM使用 WeasyPrint 将HTML转换为PDF。遵循以下指南:
支持的CSS:
- 大多数CSS 2.1属性
- 有限的CSS3(flexbox,一些变换)
- 通过
@font-face使用网络字体
不支持:
- JavaScript
- CSS Grid(使用表格代替)
- 复杂动画
- 一些现代CSS属性
页面大小和边距:
@page {
size: A4;
margin: 1cm;
}
body {
font-family: Arial, sans-serif;
font-size: 10pt;
}
打印特定样式:
@media print {
.no-print {
display: none;
}
.page-break {
page-break-after: always;
}
}
表格布局:
.table {
table-layout: fixed;
width: 100%;
}
.table th, .table td {
word-wrap: break-word;
padding: 4px;
}
字体嵌入:
对于自定义字体��使用网络安全字体或嵌入:
@font-face {
font-family: 'YourFont';
src: url('https://yourcompany.com/fonts/yourfont.woff2') format('woff2');
}
body {
font-family: 'YourFont', Arial, sans-serif;
}
测试发票模板
测试清单:
- 视觉检查:
- 徽标正确显示
- 颜色符合品牌指南
- 文本可读(不太小)
- 表格对齐正确
- 所有部分存在
- 数据准确性:
- 客户详细信息正确
- 交易金额正确相加
- 日期格式正确
- 所有变量正确替换
- PDF质量:
- 文件大小合理(<5MB)
- 图像清晰
- 无文本截断或溢出
- 页面在适当位置换行
- 多页发票:
- 每页重复页眉
- 显示页码
- 长交易列表正确分页
- 电子邮件发送:
- PDF附加到电子邮件
- 文件大小低于Mailjet限制(15MB)
- 在Gmail、Outlook、Apple Mail中呈现
测试命令(手动生成):
您可以通过API测试发票生成:
curl -X GET "http://localhost:5000/crm/invoice/{invoice_id}/pdf" \
-H "Authorization: Bearer YOUR_TOKEN" \
--output test_invoice.pdf
常见模板问题
变量未替换:
- 原因: 变量名称拼写错误或缺少数据
- 解决方案: 检查拼写是否完全正确(区分大小写),验证数据库中是否存在数据
PDF样式破损:
- 原因: 不支持的CSS属性
- 解决方案: 使用CSS 2.1属性,测试与WeasyPrint兼容的CSS
图像未显示:
- 原因: 相对URL或阻止外部资源
- 解决方案: 使用绝对HTTPS URL,确保图像可以公开访问
表格溢出页面:
- 原因: 固定列宽过宽
- 解决方案: 使用百分比宽度,
table-layout: fixed
字体未呈现:
- 原因: 字体未嵌入或不可用
- 解决方案: 使用网络安全字体(Arial、Times New Roman等)或正确嵌入自定义字体
PDF生成失败:
- 原因: HTML语法错误或WeasyPrint崩溃
- 解决方案: 验证HTML,检查WeasyPrint日志,简化复杂布局
发票PDF缓存
为了提高性能并减少冗余的PDF生成,OmniCRM包含发票PDF缓存系统。当首次生成发票PDF时,它会在数据库中缓存以供后续请求使用。
PDF缓存工作原理:
- 首次请求 - 当请求发票PDF(下载或电子邮件)时,系统:
- 从发票模板生成PDF
- 将PDF编码为Base64
- 计算PDF内容的SHA256哈希
- 在
Invoice_PDF_Cache表中存储��- 发票ID引用
- PDF数据(Base64编码)
- 文件名
- 内容哈希(用于完整性验证)
- 创建时间戳
- 后续请求 - 当再次请求相同发票时:
- 系统根据invoice_id检查缓存PDF
- 如果缓存存在且有效,则立即返回缓存PDF
- 更新
last_accessed时间戳以跟踪缓存使用情况
- 缓存失效 - 当以下情况发生时,缓存的PDF将失效:
- 发票被修改(添加/删除交易,详情更改)
- 发票模板被更新
- 手动触发缓存清除
好处:
- 性能 - 对于重复请求,立即提供PDF(无再生成延迟)
- 一致性 - 所有发票的下载均为相同PDF(除非发票被修改)
- 服务器负载 - 减少PDF生成的CPU使用
- 用户体验 - 初次生成时显示加载指示器,后续请求立即完成
缓存管理:
发票PDF缓存由系统自动管理。可以根据以下情况定期清除旧的或未使用的缓存条目:
- 年龄(例如,删除超过90天的缓存条目)
- 访问模式(删除30天未访问的条目)
- 存储限制(如有需要,实施缓存大小限制)
API行为:
通过API或UI下载发票时:
- 首次请求:在PDF生成时显示加载指示器,然后缓存
- 后续请求:立即��缓存下载
- 缓存命中/未命中对用户是透明的
重要: 当您更新发票模板时,请清除缓存以确保新发票使用更新的设计:
-- 清除所有缓存的发票PDF(在MySQL中运行)
DELETE FROM Invoice_PDF_Cache;
或更新 crm_config.yaml 以在模板更改时自动使缓存失效。
访问发票
发票可以在系统级别或按客户查看:
按客户查看:
- 导航到 客户 → [选择客户]
- 点击 计费 标签
- 在第三个卡片中查看发票列表
系统范围查看:
- 导航到 计费 → 发票(从主菜单)
- 查看所有客户的所有发票
发票统计小部件
在发票页面顶部,四个统计卡片显示财务摘要。

小部件描述:
- 总发票数 - 所有发票的零售成本总和(所有时间)和已发送发票的计数
- 未付款发票 - 尚未付款的发票总和和未付款发票的计数
- 本月发票 - 本日历月创建的发票总和及计数
- 上月发票 - 上日历月创建的发票总和及计数
值格式化:
- 超过1,000的值:显示为“k”后缀(例如,$1.5k)
- 超过1,000,000的值:显示为“M”后缀(例如,$2.3M)
- 超过1,000,000,000的值:显示为“B”后缀(例如,$1.1B)
趋势指示器:
- “本月”和“上月”的小部件显示百分比变化
- 绿色箭头向上:与前一时期相比增加
- 红色箭头向下:与前一时期相比减少
- 灰色箭头向右:没有变化
发票列表
发票表显示所有发票,包含以下列:

列描述:
- ID - 唯一发票ID
- 标题 - 发票标题/描述
- 期间 - 计费期间(开始日期 - 结束日期)或“一次性”发票的“N/A”
- 到期日 - 付款到期日
- 创建 - 发票创建日期
- 金额 - 发票总金额(零售成本)
- 状态 - 已付款、未付款或已退款
- 操作 - 可用操作(根据状态而异)
操作图标:
- ⬇ (下载) - 下载发票PDF
- 🗑️ (删除) - 作废发票(仅在未付款时)
- 💰 (付款) - 在线支付发票(仅在未付款时)
- ✉️ (电子邮件) - 将发票电子邮件发送给客户
- 💸 (退款) - 退款Stripe付款(仅适用于已付款的Stripe发票)
生成发票
点击 "+ 生成形式发票" 创建新发票。

字段描述:
- 搜索客�� - 选择客户(仅在系统范围查看中显示,在客户视图中预填)
- 标题 - 发票标题/名称(可选,默认为“发票 [期间]”)
- 开始日期 - 计费期间开始(默认为14天前)
- 结束日期 - 计费期间结束(默认为今天)
- 到期日 - 付款截止日期(默认为今天)
- 交易预览 - 显示日期范围内的所有未开票交易,并能够包含/排除特定交易
交易选择:
- ✓ (绿色加号) - 点击以排除发票中的交易
- × (红色X) - 点击以包含先前排除的交易
- 全选 - 包含所有显示的交易
- 清除所有 - 排除所有交易
- 被排除的交易以灰色显示并带有删除线文本
- 实时总计在选择/取消选择交易时更新
发生的事情:
- 系统查找客户在日期范围内的所有未开票交易
- 显示交易预览,能够包含/排除单个交易
- 显示基于所选交易的实时小计、税和总计计算
- 仅将选定(包含的)交易添加到发票中
- 生成发票PDF并缓存
- 将选定交易标记为已开票(
invoice_id字段填充) - 被排除的交易仍然保持未开票状态,并可用于未来的发票
- 发票在列表中显示“未付款”状态
示例用例:
月度计费: 将开始��期设置为月初,结束日期设置为月末,预览显示该期间的所有未开票交易。选择所有或手动排除特定交易。
特定服务发票: 使用相同的日期范围,然后手动排除不需要的交易(例如,排除非移动交易以创建仅移动的发票)。
一次性发票: 将开始和结束日期设置为同一天,预览仅显示该日期的交易。排除与此特定发票无关的任何费用。
查看发票详情
单击表中任何发票行以查看完整发票详情,包括所有交易、总计和可用操作。

发票详情模态框:
- 发票信息 - 显示发票ID、标题、日期、付款状态和作废状态
- 交易列表 - 显示发票中包含的所有交易,包含:
- 交易日期
- 标题和描述
- 零售成本
- 税额和百分比(格式为
$10.00 (10%)) - 免税交易在税列中显示“-”
- 总计摘要 - 实时计算显示:
- 交易计数
- 小计(所有零售成本之和)
- 税(所有税额之和)
- 发票总计(小计 + 税)
- 操作按钮 - 与表中相同的可用操作:
- 下载PDF - 下载发票PDF(始终可用)
- 发送电子邮件 - 将发票电子邮件发送给客户(未作废的发票)
- 支付发票 - 处理付款(未付款、未作废的发票)
- 退款 - 退款Stripe付款(仅适用于已付款的Stripe发票)
- 删除 - 作废发票(未付款、未作废的发票)
下载发票PDF
单击表中的 下载图标(⬇) 或在发票详情模态框中单击 "下载PDF" 按钮以下载发票为PDF。
下载过程:
- 单击发票旁的下载图标
- 生成期间显示加载旋转图标(仅首次)
- 浏览器提示保存文件:
Invoice_01234.pdf - PDF打开或保存到下载文件夹
PDF缓存行为:
- 首次下载 - 从模板生成PDF,缓存到数据库(可能需要2-3秒)
- 后续下载 - 从缓存立即下载
- 缓存失效 - 如果发票被修改或模板更新,则清除缓存
故障排除下载问题:
- 旋转图标永远不停止 - 检查浏览器控制台,API可能已关闭
- PDF为空或损坏 - 检查发票模板是否存在语法错误
- 下载失败 - 检查弹出窗口阻止程序设置,尝试不同的浏览器
支付发票
单击 付款图标(💰) 在线支付发票。

支付过程:
- 单击未付款发票上的付款图标
- 支付模��框打开,显示发票详情
- 选择付款方式:
- Stripe交易 - 收取保存的信用卡(对所有用户可用)
- 现金 - 手动现金付款(仅限员工)
- 退款 - 将退款作为付款(仅限员工)
- POS交易 - 销售终端(仅限员工)
- 银行转账 - 手动银行转账(仅限员工)
- 如果选择Stripe:
- 从保存的付款方式中选择卡
- 默认卡预选
- 单击选择不同的卡
- 如果选择其他方式:
- 输入参考号码(可选)
- 单击 "支付发票" 进行处理
- 系统处理付款:
- Stripe - 通过Stripe API收取卡费
- 其他方式 - 为付款金额创建负交易
- 发票状态更改为“已付款”
- 显示成功通知
自助服务与员工付款:
:doc:`自助服务门户 <self_care_portal>`(客户):
- 仅提供Stripe付款
- 必须有保存的付款方式
- 如果没有付款方式,则显示警告
- 提供添加付款方式的链接
员工门户(管理员):
- 所有付款方式可用
- 可以手动标记发票为已付款(现金、POS、银行转账)
- 可以输入参考号码以便跟踪
付款方式警告:
如果客户没有保存的付款方式,则会显示警告,提示他们在支付��票之前添加付款方式。

电子邮件发票
单击 电子邮件图标(✉️) 将发票发送给客户。
发生的事情:
- 单击发票旁的电子邮件图标
- 系统从缓存中检索发票PDF(如果未缓存则生成)
- 通过
Mailjet <integrations_mailjet>发送电子邮件,使用api_crmCommunicationCustomerInvoice模板 - 电子邮件包括:
- 发票PDF作为附件
- 客户姓名
- 发票号码和到期日
- 应付总额
- 在线支付发票的链接
- 查看/下载发票的链接
- 成功通知:“发票电子邮件成功发送”
电子邮件收件人:
电子邮件发送给所有类型为“计费”的客户联系人,或者如果没有计费联系人,则发送给主要联系人。
电子邮件模板变量:
{{ var:customer_name }}- 客户的全名{{ var:invoice_number }}- 发票ID{{ var:invoice_date }}- 发票发布日期{{ var:due_date }}- 付款到期日{{ var:total_amount }}- 应付总额{{ var:invoice_url }}- 查看/下载PDF的链接{{ var:pay_url }}- 在线支付发票的链接
故障排除电子邮件问题:
- 电子邮件未发送 - 检查
crm_config.yaml中的Mailjet API凭据 - 客户未收到 - 验证客户联系电子邮件地址
- PDF未附加 - 检查PDF生成是否成功(先尝试下载)
作废发票
单击 删除图标(🗑️) 作废发票。
要求:
- 发票必须是 未付款
- 已付款的发票不能作废(必须退款)
如何作废:
- 在列表中找到未付款的发票
- 单击删除图标(🗑️)
- 在模态框中确认:

发生的事情:
- 发票标记为
void = true - 所有交易与发票解除链接(
invoice_id设置为null) - 交易再次变为“未开票”
- 交易可以包含在新发票中
- 发票在列表中显示“作废:”前缀
- 发票操作被禁用(无法下载、支付或发送电子邮件)
- 可以通过过滤“作废”发票查看
重要说明:
- 作废与退款不同
- 作废 = “这张发票本不该存在”(计费错误,重复)
- 退款 = “撤销一张有效的已付款发票”(将钱退还给客户)
退款发票
单击 退款图标(💸) 退款已付款的发票。
要求:
- 发票必须是 已付款
- 发票必须通过 Stripe 付款
- 发票必须有有效的
payment_reference(Stripe付款意图ID) - 仅限员工用户可用(不适用于自助服务)
如何退款:
- 找到已付款的Stripe发票
- 单击退款图标(💸)
- 退款确认模态框打开:

- 单击 "确认退款"
- 系统处理Stripe退款:
- 调用Stripe API退款付款
- 在Stripe中创建退款交易
- 更新发票以包含
refund_reference
- 发票状态更改为“已退款”
- 显示成功通知
退款后的发生情况:
- 发票仍保留在系统中(未作废)
- 状态显示“已退款”
- 交易仍与发票关联
- 客户收到退款至原付款方式(3-7个工作日)
- Stripe仪表板显示退款交易
退款限制:
- 不能退款通过现金、POS或银行转账支付的发票(需要手动撤销)
- 不能部分退款(仅限全额发票金额)
- 不能退款两次
搜索和过滤发票
搜索
使用搜索栏查找发票。搜索范围包括:
- 发票ID
- 发票标题
- 客户姓名(仅在系统范围查看中)
过滤器
应用过滤器以缩小发票列表:
可用过滤器:
- 作废状态 - 所有、作废、未作废
- 付款状态 - 所有、已付款、尚未付款
过滤操作:
- 应用过滤器 - 将所选过滤��应用于列表
- 重置过滤器 - 清除所有过滤器并显示所有发票
排序
单击任何列标题进行排序:
- ID - 按发票ID排序(最新/最旧)
- 标题 - 按字母顺序排序
- 到期日 - 按到期日排序
- 创建 - 按创建日期排序
- 金额 - 按零售成本排序(最高/最低)
- 状态 - 按付款状态排序(已付款优先或未付款优先)
再次单击以反转排序方向(升序 ↔ 降序)。
分页
通过页面控件在大型发票列表中导航,显示当前页、总页数和每页项目选择器(10、25、50或100个项目)。
常见发票工作流程
工作流程1:带交易预览的月度计费
- 月末到来(例如,1月31日)
- 导航到 计费 → 发票
- 点击 "+ 生成形式发票"
- 选择客户(或如果计费多个客户则按客户操作)
- 设置日期:
- 开始日期:2025-01-01
- 结束日期:2025-01-31
- 到期日期:2025-02-15(从现在起15天)
- 标题:“2025年1月服务”(可选)
- 交易预览 部分显示1月的所有未开票交易
- 审查预览:
- 默认包含所有交易
- 检查总计:小计、税和发票总计
- 验证所有费用是否正确
- 点击 "生成发票"(��钮显示交易计数,例如,“生成发票(15)”)
- 发票创建,包含所有选定交易
- 点击发票行以查看详情并验证
- 点击详情模态框中的 "发送电子邮件" 按钮或表中的电子邮件图标
- 客户收到带PDF和付款链接的发票电子邮件
工作流程2:选择性交易开票
- 客户有多个服务(移动+互联网)和杂项费用
- 希望为每项服务开具单独的发票
- 生成第一张发票(移动服务):
- 点击 "+ 生成形式发票"
- 标题:“移动服务 - 2025年1月”
- 开始/结束:1月1日至31日
- 到期日期:2月15日
- 在交易预览中,排除所有非移动交易:
- 点击互联网交易旁的 X 按钮
- 点击杂项费用旁的 X 按钮
- 仅剩下移动服务交易
- 验证总计仅反映移动服务
- 点击 "生成发票"(显示移动交易的计数)
- 生成第二张发票(互联网服务):
- 再次点击 "+ 生成形式发票"
- 标题:“互联网服务 - 2025年1月”
- 开始/结束:1月1日至31日(相同期间)
- 在交易预览中:
- 移动交易已开票(不再出现)
- 使用 X 按钮排除杂项费用
- 仅剩下互联网服务交��
- 点击 "生成发票"
- 生成第三张发票(额外费用):
- 再次点击 "+ 生成形式发票"
- 标题:“额外费用 - 2025年1月”
- 仅未开票的杂项费用出现在预览中
- 点击 "全选" 以包含所有
- 点击 "生成发票"
- 将所有三张发票通过电子邮件发送给客户
工作流程3:排除争议或待处理交易
- 计费周期结束
- 导航到客户 计费 标签
- 点击 "+ 生成形式发票"
- 设置计费期间日期
- 交易预览显示20笔交易
- 客户对一项收费提出争议,另一项正在调查中
- 在交易预览中:
- 找到争议交易(例如,“数据超限收费”)
- 点击 X 按钮将其排除
- 找到待处理交易(例如,“安装费用”)
- 点击 X 按钮将其排除
- 交易计数更新:“选择了18笔交易”
- 总计自动重新计算
- 审查更新后的总计(排除争议金额)
- 点击 "生成发票(18)"
- 仅生成包含已批准交易的发票
- 争议/待处理交易保持未开票状态,待下一个计费周期处理
工作流程4:快速发票审查和调整
- 员工生成月度发票
- 交易预览显示意外的高总额
- 审查预览中的每笔交易:
- 注意到同一服务的重复收费
- 点击 X 排除重复项
- 注意到不应计费的测试交易
- 点击 X 排除测试交易
- 总计实时更新
- 验证新总额与预期金额相符
- 点击 "生成发票",包含更正后的交易
- 如果需要,返回并作废/删除排除的交易
- 自信地将发票通过电子邮件发送给客户
工作流程5:一次性安装发票
- 现场技术人员完成安装
- 员工手动添加安装交易
- 导航到客户 计费 标签
- 点击 "+ 生成形式发票"
- 设置���期:
- 开始日期:今天
- 结束日期:今天
- 到期日期:今天 + 7天
- 标题:“安装服务”
- 交易预览仅显示今天的交易
- 验证安装费用出现
- 使用 X 按钮排除任何定期费用(如果存在)
- 点击 "生成发票"
- 立即发送电子邮件给客户
- 客户通过Stripe在线付款
工作流程6:在客户联系之前查看发票
- 客户来电询问账单问题
- 员工导航到客户的发票列表
- 单击发票行 打开发票详情模态框
- 审查发票信息:
- 发票ID、日期、状态
- 包含的所有交易及描述
- 每笔交易的税务明细
- 小计、税和总金额
- 用确切的细节回答客户的问题
- 如果客户请求PDF,单击模态框中的 "下载PDF" 按钮
- 如果客户请求重新发送电子邮件,单击 "发送电子邮件" 按钮
- 完成后关闭模态框
工作流程7:更正计费错误
- 客户报告错误收费
- 员工单击发票行查看详情
- 在发票详情模态框中审查交易列表
- 确定错误交易
- 发票未付款,因此可以作废
- 单击模态框底部的 "删除" 按钮
- 确认作废
- 交易再次变为未开票
- 员工修改或从交易列表中删除错误交易
- 生成包含更正交易的新发票:
- 如果需要,使用交易预览排除更正的交易
- 仅包含有效费用
- 将更正后的发票通过电子邮件发送给客户
工作流程8:处理多笔付款
- 客户带现金支付多张发票
- 导航到客户 计费 标签
- 查看未付款发票
- 单击第一张发票行查看详情
- 验证金额和交易
- 单击模态框底部的 "支付发票" 按钮
- 选择 "现金" 付款方式
- 输入参考:“现金支付2025-01-15”
- 单击 "支付发票"
- 模态框关闭,发票标记为“已付款”
- 对剩余发票重复此操作
- 所有发票现在标记为“已付款”
工作流程9:处理退款请求
- 客户请求退款以补偿多付
- 员工验证发票是通过Stripe支付的
- 导航到发票列表
- 单击发票行查看详情
- 验证付款信息和金额
- 单击模态框底部的 "退款" 按钮(仅对Stripe发票可见)
- 确认退款
- 系统处理Stripe退款
- 发票状态更改为“已退款”
- 客户在3-7个工作日内收到退款
- 员工跟进客户以确认收到
故障排除
无法生成发票 - 找不到交易
- 原因: 指定日期范围内没有未开票交易
- 解决方案: 检查交易列表,验证交易存在且未开票。调整日期范围或移除过滤器。
发票PDF生成失败
- 原因: 模板语法错误、WeasyPrint崩溃或缺少客户数据
- 解决方案: 检查发票模板HTML是否存在错误,验证客户地址字段是否已填充,查看API日志。
Stripe错误导致付款失败
- 原因: 卡被拒绝、资金不足、卡过期或Stripe API问题
- 解决方案: 尝试不同的付款方式,验证卡是否有效,检查Stripe仪表板以获取拒绝原因。
无法作废发票
- 原因: 发票已付款
- 解决方案: 已付款的发票不能作废。如果需要退款,请对Stripe发票使用退款功能或手动创建信用交易。
发票电子邮件未发送
- 原因: Mailjet API凭据无效、客户没有计费联系人或电子邮件模板缺失
- 解决方案: 验证
crm_config.yaml中的Mailjet配置,检查客户联系人,验证发票电子邮件模板是否存在。
退款按钮未出现
- 原因: 发票通过现金/POS/银行转账支付(不是Stripe),或发票未付款
- 解决方案: 退款按钮仅在Stripe付款时出现。对于其他付款方式,请创建手动信用交易。
下载PDF显示旧模板设计
- 原因: PDF在模板更新之前缓存
- 解决方案: 清除发票PDF缓存:
DELETE FROM Invoice_PDF_Cache WHERE invoice_id = X;
客户无法支付发票(没有付款方式)
- 原因: 自助服务门户中没有保存的付款方式
- 解决方案: 客户必须在 付款方式 页面添加信用卡,然后才能支付发票。
同一期间生成多张发票
- 原因: 员工生成发票两次,或日期范围重叠
- 解决方案: 作废重复发票。调整日期范围以防止重叠。使用交易预览确保唯一的交易集。
交易预览未显示任何交易
- 原因: 日期范围内的所有交易已开票或不存在交易
- 解决方案: 验证日期范围是否正确。检查交易列表以确认交易存在。过滤发票以查看哪些发票包含交易。
无法排除交易生成发票
- 原因: 交易已开票或浏览器问题
- 解决方案: 验证交易在预览中显示并带有勾选标记。刷新页面并重试。如果问题仍然存在,请清除浏览器缓存。
发票总额与预期金额不符
- 原因: 包含意外交易、未计算税或排除的交易仍被计算
- 解决方案: 仔细审查交易预览。检查每笔交易的零售成本和税。验证排除的交易是否显示为灰色。检查��成发票按钮上的交易计数徽章。
生成发票按钮被禁用
- 原因: 没有选择任何交易或无效的日期范围
- 解决方案: 确保至少包含一笔交易(未排除)。验证开始日期在结束日期之前。检查到期日期是否已设置。
发票详情模态框未打开
- 原因: JavaScript错误或页面未完全加载
- 解决方案: 刷新页面。检查浏览器控制台是否有错误。尝试不同的浏览器。验证互联网连接。
交易税未在发票详情中显示
- 原因: 交易税率为0%或税额为null
- 解决方案: 验证交易是否设置了税率。检查交易创建时是否计算了税额。如有需要,更新交易。
发票详情模态框中缺少操作按钮
- 原因: 发票已作废或用户权限不足
- 解决方案: 作废的发票仅显示下载PDF按钮。验证发票状态。检查用户角色和权限。
相关文档
integrations_mailjet- 发票电子邮件发送和模板administration_configuration- 发票模板配置payments_transaction- 创建出现在发票上的交易payments_process- 处理发票付款payment_system_guide- 付款API参考和供应商配置
付款方式管理
OmniCRM的付款方式系统允许客户和员工安全地管理付款卡,使用 多供应商支付处理(Stripe、PayPal等)。付款方式使服务的自动计费、一次性付款和定期收费成为可能,而无需在OmniCRM中存储敏感的卡数据。
另请参见:付款系统指南 <payment_system_guide>,计费概述 <billing_overview>,付款处理 <payments_process>,发票 <payments_invoices>。
概述
付款方式系统提供:
- 安全的卡存储 - 由支付供应商(Stripe、PayPal)进行令牌化,永远不会存储在OmniCRM中
- 多供应商支持 - 支持Stripe和PayPal付款方式
- 多张卡 - 客户可以存储多种付款方式
- 默认选择 - 指定首选付款方式以进行自动收费
- 到期跟踪 - 监控和更新即将到期的卡
- 自助服务 - 客户可以通过
自助服务门户 <self_care_portal>管理自己的卡 - 员工管理 - 支持员工可以代表客户添加/删除卡
支持的付款方式:
- 信用卡(Visa、Mastercard、American Express、Discover)
- 借记卡
- 预付卡(如果卡网络支持)
不在OmniCRM中存储:
卡详细信息由支付供应商令牌化并安全存储。OmniCRM仅存储:
- 支付供应商(stripe、paypal)
- 卡品牌(Visa、Mastercard等)
- 后4位数字
- 到期月/年
- 持卡人姓名/昵称
- 供应商特定的付款方式令牌
访问付款方式
从客户页面:
- 导航到 客户 → [选择客户]
- 点击 计费 标签
- 滚动到 付款方式 部分
或直接:
从即将到期的卡仪表板:
查看所有即将到期的卡客户:
这显示了系统范围内在接下来的60天内到期的卡的列表。
付款方式列表
付款方式表显示客户的所有存储卡:

列描述:
- 昵称 - 卡的友好名称(例如,“个人卡”,“工作Visa”)
- 发行者 - 卡品牌和后4位数字
- 到期 - 到期月/年(MM/YYYY格式)
- 添加 - 卡添加到帐户的日期
- 默认 - 勾选标记表示自动收费的默认付款方式
每张卡的操作:
每行都有一个操作菜单(⋮),选项包括:
- 设为默认 - 将其设为默认付款方式
- 删除 - 从帐户中删除卡
添加付款方式
单击 "添加付款方式" 打开安全付款模态框。
步骤1:输入卡详细信息
安全付款表单出现(由Stripe Elements或PayPal SDK提供支持):

必填字段:
- 卡信息 - 卡号、��期、CVC(由Stripe验证)
- 持卡人姓名 - 卡上的姓名
- 国家/地区 - 账单国家
可选字段:
- 卡昵称 - 友好的标签以区分卡片
安全性:
- 卡详细信息直接输入到供应商托管的安全iframe中(Stripe Elements / PayPal SDK)
- OmniCRM从未看到或存储完整的卡号
- PCI DSS合规性由支付供应商处理
- 实时验证防止无效卡号
步骤2:提交并令牌化
当您单击 "添加付款方式" 时:
- 客户端验证:
- 支付供应商验证卡号格式
- 检查到期日期是否在未来
- 验证CVC格式
- 令牌化:
- 卡详细信息直接发送到支付供应商(而不是OmniCRM)
- 供应商创建一个安全令牌(例如,
pm_1A2B3C4D用于Stripe) - 令牌返回给OmniCRM
- 服务器处理:
- OmniCRM将令牌保存到客户记录中,并附上供应商标识符
- 存储后4位数字、品牌、到期和供应商名称以供显示
- 从未有完整的卡号接触OmniCRM服务器
步骤3:确认
成功消息出现:
您的Visa卡(后四位为1234)已添加到您的帐户。
新卡出现在付款方式表中。
自动默认选择:
- 如果这是客户的第一张卡,则自动设为默认
- 如果客户已经有卡,则新卡作为非默认添加
- 客户可以在添加后更改默认设置
设置默认付款方式
默认付款方式用于:
- 自动定期服务收费
- 发票付款
- 充值和补充
- 一次性交易(除非另有说明)
更改默认设置:
-
在付款方式表中找到要设为默认的卡
-
单击卡旁的 操作菜单(⋮)
-
选择 "设为默认"
-
确认消息出现
Visa卡(后四位为5678)现在是您的默认付款方式。
勾选标记移动到新选择的卡上。
视觉指示:
默认卡在默认列中显示,通常带有绿色勾选标记徽章。
删除付款方式
删除过期、丢失或不再需要的卡。
步骤1:启动删除
- 在付款方式表中找到要删除的卡
- 单击 操作菜单(⋮)
- 选择 "删除"
步骤2:确认删除
确认模态框出现:
您确定要删除此付款方式吗?
卡:Visa(后四位为1234)到期:12/2026
⚠️ 警告:如果这是您唯一的付款方式,您将需要添加新的付款方式以继续使用需要自动计费的服务。
[取消] [删除付款方式]
单击 "删除付款方式" 以确认。
步骤3:删除完成
成功消息:
卡从表中移除并从Stripe中删���。
重要限制:
- 如果存在其他卡,则无法删除默认卡 - 首先将其他卡设为默认
- 如果删除最后一张卡,则会发出警告 - 需要付款的服务可能会暂停
- 无撤销 - 删除是永久的;客户必须重新添加卡(如有需要)
管理即将到期的卡
OmniCRM跟踪卡到期日期,并提供工具主动更新即将到期的卡。
即将到期的卡仪表板
导航到 计费 → 即将到期的卡 查看系统范围的列表:
客户 卡到期 距离采取行动的天数 John Smith Visa **1234 02/2025 12天 更新 Acme Corp MC5678 03/2025 45天 更新 Jane Doe Amex**9012 01/2025 已过期 更新

过滤器:
- 到期范围 - 接下来的30/60/90天或已过期
- 客户类型 - 个人与企业
- 服务类型 - 按需要付款方式的服务过滤
操作:
- 更新 - 打开客户的付款方式页面以添加新卡
- 通知 - 向客户发送电子邮件提醒(如果已配置Mailjet)
到期通知
如果已配置Mailjet,将自动发送电子邮件:
- 到期前60天 - 第一次提醒
- 到期前30天 - 第二次提醒
- 到期前7天 - 最后警告
- 到期时 - 卡已过期通知
客户可以单击电子邮件中的链接,通过自助服务门户更新其付款方式。
电子邮件模板变量:
Mailjet模板接收:
- 客户姓名
- 卡品牌和后4位数字
- 到期日期
- 自助服务付款方式页面的链接
请参见 integrations_mailjet 以获取电子邮件模板配置。
更新即将到期的卡
推荐工作流程:
- 客户收到到期通知电子邮件
- 客户登录自助服务门户
- 导航到 计费 → 付款方式
- 点击 "添加付款方式"
- 输入新卡详细信息(相同卡的更新到期,或替换卡)
- 将新卡设为默认
- 删除旧/过期卡
员工工作流程:
如果客户拨打支持电话:
- 员工打开客户帐户
- 导航到 计费 → 付款方式
- 代表客户添加新卡(客户通过电话提供详细信息)
- 将新卡设为默认
- 删除过期卡
- 与客户确认
警告
绝不要要求客户通过电子邮件或短信发送卡详细信息。始终使用:
- 安全的自助服务门户进行自助服务
- 电话与员工直接输入系统
- 在零售地点亲自进行
当卡过期时发生的事情
当付款卡达到到期日期且未更新时:
立即影响:
- 自动付款失败
- 支付供应商拒绝使用过期卡的交易
- 月度服务续订未能处理
- 自动充值失败
- 发票自动付款失败
- 客户通知
- 系统尝试收费
- 发送付款失败通知
- 发送“更新付款方式”电子邮件,附带自助服务门户链接
- 服务状态更改
- 后付费服务 - 可能会暂时继续,余额未结清
- 预付费服务 - 当余额耗尽时暂停服务
- 自动续订服务 - 续订失败,服务可能过期
后续行动:
第1-3天(宽限期):
- 服务正常继续
- 客户收到第一次付款失败通知
- 系统尝试重试(根据配置)
第4-7天:
- 第二次付款尝试(如果配置)
- 发送警告电子邮件
- 客户服务可能联系客户
第8-14天:
- 由于未付款,服务可能会暂停
- 暂停状态阻止使用,但保留帐户
- 客户可以通过更新付款方式和支付未结余额恢复服务
第15天及以后:
- 由于未付款,服务可能会终止
- 库存(SIM卡、设备)标记为退回
- 发送最终通知
- 帐户转交给催收(如适用)
防止服务中断:
为避免服务中断:
- 在到期前30天更新卡
- 添加多种付款方式以备份
- 启用付款失败警报
- 每周监控即将到期的卡仪表板
到期后恢复服务:
如果由于卡过期而暂停服务:
- 添加新的有效付款方式
- 将其设为默认
- 支付未结余额(如有)
- 联系支持以重新激活服务
- 服务在几分钟到几小时内恢复
付款方式安全
令牌化
OmniCRM使用供应商令牌化以确保安全:
- 客户输入卡 → 直接发送到支付供应商服务器
- 供应商验证并令牌化 → 创建唯一令牌
- 令牌存储在OmniCRM中 → 从未存储完整的卡号
- 付款处理 → 令牌发送给供应商,供应商收费
OmniCRM存储的内容:
{
"vendor": "stripe",
"vendor_payment_method_id": "pm_1A2B3C4D5E6F",
"payment_type": "card",
"brand": "visa",
"last4": "1234",
"exp_month": 12,
"exp_year": 2026,
"name": "John Smith",
"nickname": "个人卡",
"is_default": true
}
OmniCRM不存储的内容:
- 完整的卡号
- CVV/CVC代码
- 磁条数据
- PIN号码
PCI合规性
通过使用供应商托管的付款表单:
- 减少PCI范围 - 卡数据从未接触OmniCRM服务器
- 供应商托管字段 - 卡输入发生在供应商的安全iframe中
- 不存储卡 - 使用令牌代替原始卡数据
- 安全传输 - 所有通信通过HTTPS/TLS进行
请参见 付款系统指南 <payment_system_guide> 以获取支付供应商安全详细信息。
常见工作流程
工作流程1:客户添加第一张付款方式
场景: 新客户注册服务
- 客户创建帐户
- 选择服务计划
- 在结账时提示添加付款方式
- 在Stripe模态框中输入卡详细信息
- 卡令牌化并保存
- 自动设为默认
- 服务提供
- 处理第一次收费