社区活动通过Matters API PayTo发奖金实验

土豆炒青椒
·
·
IPFS
既然邮件提示bug,那就还是回去实验PayTo。。。

liker io一对多一次性投币,只有第一个被投币对象才能收到提示邮件,而且数据还是错的,害别人白开心一场,也挺囧的😳。。。。。

https://api.like.co/tx/id/查区块链id,也只会显示投币对象和投币总数,不会显示每个对象分别被投了多少:

既然这样,就更别指望被投币对象还能收到正确的邮件提示了。。。。。。




基于以上原理只有考虑去用matters API生成付款链接,再付款了。

matters api投币支持作者大致原理如下:

  1. 通过PayTo API生成liker land付款完整链接,此时transaction状态为pending
  2. 在liker land付款链接付款完成,full链接自带的redirect_uri参数告知被投币文章,此时付款完成
  3. transaction完成后,投币文章下方显示投币人圆圈头像。


比如我要给这篇文章投币,流程如下:

1 Matters API Pay To

1.1 登录

想要使用Matters API PayTo需要验证登录才可进行,不同于query取出tag、article之类的。所以先用Matters userLogin API 登录。登录API代码如下:

mutation {
  userLogin(input: {
    email: "matters登录邮箱"
    password: "matter登录密码"
  }) {
    token
  }
}


一旦邮箱和密码匹配,你将会得到一个token用于需要身份验证的API授权使用。

token就是一串看不懂的abcd。。。。。。不用管是什么意思。。。。。。当然了token会过期,所以不是每一次登录都返回相同的token值.。。。。。。


1.2 用payto生成付款链接

当你在登录状态,想给某个用户的某篇文章投币时,就会用到payto api。

假如我想给@雞毛的小事 的这篇文章雞毛的大事 (D-28)投币20 ,api代码如下:

mutation {
 	payTo(input: {
    amount: 20
    currency: LIKE
    purpose: donation
    recipientId: VXNlcjo1MzIyNw
    targetId: QXJ0aWNsZToxNjEyOTk
  }) {
    redirectUrl
    transaction {
      fee
      amount
      id
      state
      purpose
      createdAt
      sender {
        displayName
      }
      recipient {
        displayName
      }
    }
  }
}


这一步除了需要Authorization。Authorization就是添加1.1做登录验证的token值到header里面。

复杂一点的api还是去postman测试方便点。。。。。。


1.2.1 recipientId是作者的id,id号获取代码如下:

query {
  user (input: {
    userName: "sabaahprin"
  }) {
    id
    displayName
    userName
    likerId
  }
}

id 和 liker id是两个玩意,别搞错了

1.2.2 targetId是要投币文章的id号:

获取文章id号代码如下:

query {
  article (
    input: {
      mediaHash: "bafyreieqsapvitr7xwrir6vqnvnpnnopwfljtai6v7uqceyubzjtye5m6a"
    }) {
    id
    title
    summary
    author {
      id
      displayName
    }
    wordCount
    readTime
  }
}


当然了也可以通过文章media hash获取文章id的同时获取作者id:


需要payto的参数(文章id、作者id,验证token)搞好后,就可以生成liker land付款链接:


完成这一步只是创建了transaction,如果不进入下一步——去like co付款转账,transaction的状态永远都是pending。

这一步相当于支持作者,需要进入liker land完成支付,如果不完成支付,就永远都是转圈圈的pending状态


参数说明:

  • 文章id、作者id、作者likerId都可以通过Matters API公开获取
  • 用户登录邮箱,登录密码不是API可以随意获取,要保管好,不要泄露天机
  • 登录身份验证后得到的token更不能随意泄露,Matters API需要验证身份时必备,比如在PayTo时没有token就不能进行下一步



2 用payto api生成的付款链接付款

通过payto api获得的给@雞毛的小事 雞毛的大事 (D-28)投币20的付款链接长这样:

https://like.co/in/widget/pay?to=sabaahprin&amount=20&via=matterspool&fee=0&state=e578d2eb-ca3f-40d7-897c-613b31920dde&redirect_uri=https%3A%2F%2Fserver.matters.news%2Fpay%2Flikecoin&blocking=true


该链接把所有参数都用上了。。。。。。

  • to:付款人的likerId
  • amount:投币金额
  • via:传说中的agent。。。。。默认是matterspool
  • fee:给matterspool的中介费,默认为0,很良心
  • state:付款状态参数
  • redirect_uri:返回matters页面,告知投币者投币结果(成功、还是失败)
  • blocking:当付款在区块链上确认生成后,激活redirect_uri的Boolean参数


把参数齐备的付款链接在浏览器打开,付款完成后会页面自动刷新到matters,并告诉你投币成功,即transaction状态由pending转为success。

同时收到matters邮件,告诉你最近有投币行为:

当然了被投币对象的文章下面也会显示投币者头像,因为调用payto api时指定了文章id:

以上完成用API给《雞毛的大事 (D-28)》投币20


一对一的投币实验,被投币者当然会收到邮件提示。。。。


3 PayTo一对一多发送实验

社区活动完结时,不会只给一个人投钱嘛。。。。。。所以为了完成给一串人发钱,还需要继续实验,顺便看看操作是否顺畅(比点按钮到底方便了多少)。

顺延之前的实验,还是选择python notebook弄吧。。。。。。


3.1 获取投币对象

假如某活动搞完了,有两篇投稿,我先去搜集算奖金需要的数据,整理成以上表格。

……

然后开始算奖金……此处省略很多步……根据自己的算奖金规则该咋算咋算……

……

算完奖金,“活动参加者”1号——小鸡得了28 likecoin;“活动参加者”2号——小码的了30 likecoin。

为了方便,奖金就是随机数了。。。。。。

到此为止,奖金算到人头上后开始发……


3.2 在notebook里面,API略有变化

之前1对1给雞毛的大事 (D-28)发奖时,在postman里面测试,加上token直接过了。到了python notebook,按照常规加header貌似不行。。。。。。

按照常规加token不是加在header里面嘛,结果到了notebook不行了,一直说我在以游客身份请求付款。。。。。。

刚开始我以为这是matters api cors(Cross-Origin Resource Sharing)造成的,查了半天也没解决问题。后来对比header异同,发现可能是cookie造成的。。。。。。

login api验证密码登陆后,得到的request header长这样:

登陆header里面包含token,这个token要2022年1月才过期。。。。。。。

一般的普通request返回header长这样:

于是就把登陆后获取的cookie放在payto api里面请求:

获取cookies代码长这样:

把header auth换成cookie后,终于不是游客了,返回付款链接给我:

3.3 解决了cookie和header的玄学后,就可以模拟发奖了。。。

把链接弄成可点击的:

然后点击url打开浏览器,去liker land付款:

在liker land需要再次确认一次身份。。。。。。

然后输密码付钱。。。。。。

签署付款完成后,我就被redirect回了matters。。。。。。与此同时我也收到了matters邮件提示,我给小鸡支持了28个币。。。。。。

完成此操作步骤后,再循环去给小码付款。。。。。。




以上就是目前思考出来的可以稍微简单一点的发奖金方法,其实原理还是1对1

本次实验只有2个人,当有100个人等待排队收款时,需要生成100个付款链接,然后挨个签署100次。。。。。。虽然需要签100次,但是双方都会收到邮件提示。。。。。。。

上一期试验完成后,我收到两笔来自liker land的神秘打款。可能我幸运地当了投币对象的第一人,所以收到了邮件提示。如果我没有在投币列表第一个,我就默默地被投了也不知道。。。。。。。

所以发收据(邮件提示)相当重要。。。。。。

以上办法虽然没有解决一次性签署一对多发钱问题,但是解决了手动输数字投币的问题——再也不用担心手滑输错奖金了。

然后就是,token要几个月才过期,慢慢发。。。。。。

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!