无注册登录的工具型产品的低成本付费化改造
- 我有一个产品,叫做纽扣词云,是一个生成词云图的产品
- 这个产品非常简单,没有注册登录功能
- 这个产品是免费的
- 我想为这个产品添加一些付费功能,但希望能够以很低的开发量去完成,同时保持无需注册登录
目前为止,这个产品已经稳定运行了 2 年多了,每天都有几百人访问这个服务,几乎所有用户都给了很高的评价。
怎么说呢,有一个大家会用的产品的确很好,但这毕竟是一笔支出,如果能实现部分收费,从而让它自己赚到服务器的成本,甚至还能补贴一些零食可乐,那就再好不过了。
但是,我不太想破坏这个产品的基本调性,我也懒的去为了实现这个功能去开发注册登录支付等一大堆功能,大家喜欢它正是因为简单(无需注册登录),方便,好用,如果为了要增加付费功能,把产品变得和那些「平平无奇」的产品一样臃肿,那么就得不偿失了。
以下是我的改造计划。
确定收费策略
我肯定不会对所有用户收费,考虑到大多数用户的使用场景和对服务器的压力,我确定的收费策略如下:
- 用户提交 1 万字以下的词云,免费
- 1 万字以上的文本,需要付费使用,使用费为 19.9 元 ,长期有效
事实上,也可以指定一个年费,让用户按年付费,但为了减少开发量,也为了尽量不让用户觉得我在恰烂钱,我觉得 19.9 元的费用是比较合理的,这既是设立了一个门槛,减轻了服务器的负担,也实现了收入模式。
在面包多创建一篇付费内容
面包多是一个虚拟物品交易平台,一般用于付费阅读,出售软件,电子书等,但因为提供了比较全的 API,因此也可以用于序列号的出售,此处就是利用了这一点
在面包多新建一个内容,设置好价格,描述和付费后可见内容,设置如下
因为
1.用户购买后会自动生成并展示唯一的订单号
2.面包多提供了「根据订单号查询订单状态」的接口
所以我可以把订单号作为类似于「序列号」的东西,让用户输入,如果能根据这个订单号查询到订单状态,那么就认为这个用户买了高级版,并输出词云图结果,如果没有,则不通过。
开发验证接口
为了不暴露调用接口所使用的 token,我们需要单独开发一个验证接口,去验证用户提交的 key (也就是订单号)是否有效,这个接口非常简单,拿到传过来的 key 之后,再请求面包多的订单信息接口即可,PHP 代码示例如下(用 postman 直接生成的,其他语言也可以用 postman 直接生成):
<!--?php
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Methods:*');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
//获得key
$key = $_GET['key'];
$token = '你的面包多token';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL =--> "https://x.mianbaoduo.com/api/order-detail?order_id=".$key,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => "",
CURLOPT_HTTPHEADER => array(
"Postman-Token: 29d6871b-54d9-40bb-aded-653fa8e76dab",
"cache-control: no-cache",
"x-token: ".$token
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$response = json_decode($response,true);
if($response['code']!=200){
$return['code'] = $response['code'];
$return['result'] = 'fail';
echo json_encode($return);
exit;
}else{
if($response['result']['urlkey']&&$response['result']['urlkey']=='面包多创建的内容的urlkey'){
//此处也可以添加更多逻辑,例如频率限制等等
$return['code'] = 200;
$return['result'] = 'ok';
echo json_encode($return);
exit;
}else{
$return['code'] = 111;
$return['result'] = 'no_pay';
echo json_encode($return);
exit;
}
}
}
拿到结果之后直接输出即可,这个接口会在后面用到。
改造产品
在用户提交生成词云请求后,判断字数是否超过 10000
如果超过 10000 字,那么尝试从 cookie 中拿 key,如果拿不到,则让用户填写 key
无论是从 cookie 中拿到的 key,或者是从用户输入中拿到的 key,都调用上面提到的接口去验证是否有效,如果有效,则继续执行词云图生成的逻辑,并把 key 存在 cookie 中,如果无效,则提示错误。
同时在输入 key 的弹框中放入购买的入口,这就算产品的改造工作基本完成了。
用户的使用流程如下:
之所以存到 cookie 是减少用户的输入次数,但凡输入一次 key,那么在 cookie 被清除之前都不需要再次输入。
为了避免混淆,我这里再提示一下:key = 订单号
至此,整个项目的「付费化改造」工作就基本完成了,整个改造工作约耗时 30 分钟,共计修改代码在 100 行以内,同时保持了「无注册登录」的特性,绝大部分用户依然是无感知使用,仅有部分用户在提交复杂操作时被提示收费。
改造效果如何呢?在我提交代码的 30 分钟内,就有人付费了:
这真的是MVP啊
但每天都有人付费,美滋滋
方法很棒,面包多也可以是一个收费渠道,这样都不用开发支付相关代码
值得学习~
感谢分享,学习了
文章非常好超喜欢
文章还不错,支持一下
赞!
文章不错支持一下吧
文章非常好超喜欢
进了你的博客,出不来就算了,还跟着注册了桔本熊和面包多,现在又多了个纽扣词云!!
哈哈哈感谢感谢
大奎土土土土土土圭亚那
学习了哦
棒,面包多解决了付费部分。我正在做一个通用的登录部分