基于有赞云的个人收款即时到帐实现方案 [此方案已废弃]

file

官方调整了策略,已经下线了这种玩法,所以请不要浪费时间在这个方案的研究上了:https://bbs.youzan.com/forum.php?mod=viewt...
https://bbs.youzan.com/thread-672907-1-1.h...

很多人都想出售自己的一些产品,课程,电子书,或者其它在线可售卖的东西,但是不管是微信支付还是支付宝,都需要公司账户,这一套不是不可以搞,就是太麻烦了而已。今天介绍的就是不需要公司账号实现个人收款的自动化方案(当然,交易 1% 手续费比微信等略高)。

思路是:

环境准备:在有赞开通微小店(免费)-> 注册有赞云 -> 创建自用型应用 -> 绑定微小店 -> 开通 push (推送交易状态)

交易流程:调用有赞云的收银 API ,创建支付二维码(并存储二维码 id 到自有网站订单) -> 用户扫描二维码并支付 -> 推送交易状态到你的网站 -> 更新网站订单状态 -> 完成购买

环境准备

第一步:开通微小店

去这里注册并开通小店:https://h5.youzan.com/v2/index/wxdpc (手机下载客户端开通哦,不是微商城!是微小店,免费的!)

第二步:注册有赞云

去这里注册个人开发者:https://www.youzanyun.com/ ,然后创建自用型应用,填写应用名称,下一步,选择你上面开通的小店名称并完成授权绑定。

file

注意:这里绑定应用的时候是没有微小店选项的,填写完应用名称后下一步是店铺授权,就有你手机上创建的微小店名称可选的。

第三步:开通应用动态推送

这一步主要是接收订单交易状态的,用户发起支付与支付完成都有推送消息,后面我们会介绍如何处理推送。

开通推送的方法:有赞云控制台 -> 应用设置 -> 开发信息 -> 修改 -> 填写接收推送的网址即可。

环境已经准备 OK 了,你的手机上应该已经装了微小店应用了,接下来我们要发起交易,开始之前我们得准备好 SDK,如果你使用 Laravel,我封了一个包:overtrue/laravel-youzan,如果你是其它框架,那么请使用 HanSon 的封装:HanSon/youzan-sdk。当然还有一个选择,官方 SDK:youzan/open-sdk-php

安装完 SDK,配置环境我们需要一些参数:

  • client_id: 应用ID,在有赞云控制台 -> 应用设置 页可以找到
  • client_secret 密钥,同样在应用设置页
  • kdt_id 其实就是原来的口袋通ID,就是应用设置页基本信息中的 “授权店铺id”

交易流程

第一步:创建收款二维码

这一步一般是用户在你的网站选择完商品,或者在购物车点结算,你在自己网站创建完订单后,调用有赞云收银 API 创建二维码,以我的包为例(大同小异啦):


    $result = \Youzan::request('youzan.pay.qrcode.create', [
                    'qr_type' => 'QR_TYPE_DYNAMIC',  // 这个就不要动了
                    'qr_price' => 100,  // 金额:分
                    'qr_name' => 'iPhone 8 plus 64G 金色', // 收款理由
                    'qr_source' => '102828399222', // 自定义字段,你可以设置为网站订单号
                ])'

得到的结果呢包含三个值:

    "qr_id": "19707",
    "qr_url": "https://trade.koudaitong.com/wxpay/confirmQr?qr_id=19707&kdt_id=55",
    "qr_code": "data:image/png;base64,iV......"

其中 qr_id 你需要与刚才的订单绑定(这里取决于你自己的实现了,比如你在网站应该有 payments 表用于专门记录支付记录)

qr_url 呢其实就是扫码完打开的页面,qr_code 是图片内容,可以直接放到 img 的 src 中,data-url 格式。就是一个二维码图片。

用户扫码后打开一个网址完成付款。这时候你的手机 app 微小店会告诉你有新的订单。

接下来就是处理交易结果了。

第二步:主动查询订单

为啥要主动查询呢,不是有推送么,对,但是推送的时间以及成功率是无法保证的,所以我们应该主动去查询,我的做法是在交易创建完成后,定时(2秒左右)查询一次订单信息:


    $payment = Payment::whereQrId('19707');
    $result = Youzan::request('youzan.trades.qr.get', [
         'qr_id' => $payment->qr_id, 
         'status' => 'TRADE_RECEIVED'
    ]);

    if ($result['total_results'] > 0) {
        $order = array_pop($result['qr_trades']);
        $payment->status = Payment::STATUS_SUCCEED;
        $payment->save();
    }

上面我们先从自己的数据库根据 qr_id 查询交易记录得到 $payment,然后调用了有赞云 API 的二维码订单列表得到这个二维码产生的成功的交易订单。

如果得到成功交易的订单数量大于 0 (一般就一笔),就更新支付状态为成功。

反之,继续查,这里一般有一个限制,比如查10次没有交易就关闭,或者其它你觉得 OK 的策略都可以。

第三步:处理推送

这一步与其它支付的情况不太一样,因为推送过来的内容不是直接就能与你的订单关联上的,推送过来的内容中有一个 id 字段,这是有赞的订单 ID ,不是我们的订单 ID,我们先要拿这个 ID 去他们的 API 取到交易详情,然后再从交易详情得到 qr_id 才能查出我们订单的关联信息。


    if ($request->get('type') == 'TRADE_ORDER_STATE' 
        && $request->get('status') == 'TRADE_SUCCESS') {
        $order = Youzan::request('youzan.trade.get', ['tid' => $request->id]);

        $payment = Payment::WhereQrId($order['trade']['qr_id'])->first();

        if ($payment && $payment->status !== self::STATUS_SUCCEED) {
            $payment->status = Payment::STATUS_SUCCEED;
            $payment->save();
        }
    }

获取交易详情 API 为 youzan.trade.get,传入的 tid 就是推送内容里的 id。二维码 ID 在交易详情的 trade 里。

那这一套流程就实现完了,个人感觉还是非常容易的,收款完成你就可以在微小店提现了。

个人觉得这一套下来接入成本非常的低,然后还有一个非常大的好处是给你省去很多开发工作,因为在手机 app 上随时有推送,以及订单管理,每天的收益统计等,很方便,当然 1% 的手续费感觉其实还好吧,毕竟你的个人站交易也大不到百万千万这样的额度去。

相关资料:

有赞云:http://www.youzanyun.com

微小店:https://h5.youzan.com/v2/index/wxdpc

收银台 API: https://www.youzanyun.com/apilist/list/gro...

交易 API: https://www.youzanyun.com/apilist/list/gro...

overtrue/laravel-youzan: overtrue/laravel-youzan

HanSon/youzan-sdk: HanSon/youzan-sdk

官方 SDK:youzan/open-sdk-php

参考:

个人网站即时到账收款解决方案 - xu42

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 6年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 29

@rufeng 嗯,那你别用 Laravel,也别用微信支付,也不能用支付宝,因为我会认为你写的啥都是软文。 :laughing:

6年前 评论

对个人来说很赞?

6年前 评论

个人收款自动到账通知,支持用您自己的收款账号收款
支持渠道:《支付宝》《微信》《云闪付》
支持渠道:《支付宝转账到银行卡》《微信转账到银行卡》
支持渠道:《银行卡到银行卡》《银行商户聚合码》
合作方式:直接商户方式,源码合作方式,独立部署合作
文档:文本教程,视频教程,主流开发语言DEMO代码
商户后台:完善的商户后台
优势:支持多账号、多渠道并行负载,解决量大、风控、并发的问题

感兴趣或者有帮助到的,可以去看看:
【收钱爸爸】 地址:https://www.shouqianbaba.cn

4年前 评论

所以有赞小店个人支付解决方案已行不通。

5年前 评论

为了不让后人走坑,这里说一下,有赞微小店现在已经不在支持绑定应用,之前绑定过的如果没有删除还可以用,但是如果之前绑定过的应用删除了,那么也没法重新绑定了,并且未来绑定过的应用也会不能用,研究了一下午才找到答案。https://bbs.youzan.com/forum.php?mod=viewt...

5年前 评论
GalaxyNo_1

3.0.0了,要升级了吧

5年前 评论

提醒一下大家 收到推送之后不要忘记返回 {"code":0,"msg":"success"} 超过100次推送如果没有返回的话 就会进入亚健康状态 之后的推送都无法正常获取 sob: 血淋淋的教训 https://www.youzanyun.com/docs/guide/3401/...

5年前 评论

Composer 安装 composer require overtrue/laravel-youzan -vvv 出错:


  Problem 1
    - Installation request for overtrue/laravel-youzan ^1.0 -> satisfiable by overtrue/laravel-youzan[1.0.0].
    - overtrue/laravel-youzan 1.0.0 requires hanson/youzan-sdk ~2.0 -> satisfiable by hanson/youzan-sdk[2.0.0, 2.0.1, 2.0.2, 2.0.3].
    - hanson/youzan-sdk 2.0.0 requires hanson/foundation-sdk ^1.0 -> satisfiable by hanson/foundation-sdk[1.0.0].
    - hanson/youzan-sdk 2.0.1 requires hanson/foundation-sdk ^1.0 -> satisfiable by hanson/foundation-sdk[1.0.0].
    - hanson/youzan-sdk 2.0.2 requires hanson/foundation-sdk ^1.0 -> satisfiable by hanson/foundation-sdk[1.0.0].
    - hanson/youzan-sdk 2.0.3 requires hanson/foundation-sdk ^1.0 -> satisfiable by hanson/foundation-sdk[1.0.0].
    - Conclusion: don't install hanson/foundation-sdk 1.0.0

然后分别尝试安装

  • overtrue/laravel-youzan^1.0.0,
  • hanson/youzan-sdk,
  • hanson/foundation-sdk

都安装失败。

环境:

  • Laravel 5.6
  • PHP 7.1.4
  • Windows 10 17093
  • Composer 1.6.3
  • Nginx 1.11.13

请问应该如何解决?

6年前 评论
小滕

支持 :smile: 大佬稳 :+1:

6年前 评论

@rufeng 头像和评论成反比

6年前 评论

软文吗...

6年前 评论
幽弥狂

这么快。。。五杀没跑了

6年前 评论
幽弥狂

我要试试、、学习一下新姿势。。

6年前 评论

感谢超哥,我替我家猫谢谢你,这下有猫粮吃了~

6年前 评论

@overtrue 大佬稳,找到了

6年前 评论

@overtrue 不对,这里的输入框是你随便输入的,下一步的时候才有授权店铺,我记错了,sorry

6年前 评论

@omiga喵 1. 确定你在手机上下载了微小店,2, 创建应用为自用型应用,默认在微商城那个选择状态下在框里应该是可以看到微小店的哦

6年前 评论

选微商城么?

6年前 评论

大佬,产品类型没有微小店这个选项,点了也不出现名称,应该咋办...

6年前 评论

@mostwin 微小店,不是微商城。

6年前 评论

店铺免费试用期剩余6天;逾期未订购将被打烊,无法正常营业

6年前 评论

之前看到有人在v2提过 今天超神直接把轮子都造出来了 。。。。神速啊

6年前 评论

安正超粉丝协会会长大人参上

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!