一个新的经济引擎
我们一直在努力

入门指南:如何用NEM/PHP/Stripe制作奖励积分App

运用NEM+Laravel5.5+Stripe将积分奖励平台变得非常简单

先决条件

在本教程中,您将会学习到如何使用NEM区块链来奖励顾客消费(方式参考星巴克积分)。我们将会使用NEM StripeLaravel Framework(v5.5)来构建一个获得奖励积分的电子商务应用程序。

首先你需要熟悉如何使用Laravel框架来制作应用程序,并且需要一个新的Laravel安装程序以便阅读本教程。

值得一提的是,我们将会在本教程中使用NIS(NEM基础设施服务器)API,同时每一个请求我们都将会手动完成,并不会用到任何UI客户端/钱包。因此,我们需要充分了解API如何工作及使用。为了做到这一点,你需要安装Httpie工具。

文章分为两部分:

  • 第一部分,我们将谈论NEM的总体情况,以及在我们的案例中如何准备NEM的基础设施。
  • 第二部分,我们将使用Laravel框架来编写和实施我们的应用程序。

介绍

当我第一次加入到NEM社区的时候,我见到了NEM基金会团队,我对他们的友善、活跃以及充满能量的状态感到印象深刻,这是一个由开放和积极主动的人们推动着想法的NEM区块链社区。

但是这种感觉并不是第一次,当我第一次被介绍给另一个在线社区的开发者–Laravel Framwork社区时,我也有同样的感受。这两者有许多共同之处–新颖的观念,先进的技术,新入市的困难性,其他成员的友好支持和广泛的应用。

现在我已经是NEM和Laravel两个社区的成员了,我决定编写一个应用程序,来说明如何建立由NEM驱动的区块链技术支持的Lavravel网络服务。

我们要建立什么

在过去的三年中,我是Babystep.tv的IT团队的一员,为父母们提供服务。现在我们推出了新的项目–Family Points平台,这个平台通过奖励积分的方式鼓励父母花更多的精力在儿童教育中。

这个平台有非常多的功能,核心功能是将父母的消费作为积分退还给他们,父母们在平台上有丰富的母婴产品可供选择,父母花钱购买这些优质产品的同时,也将以获得积分的形式得到奖励。

 

好的,现在我们知道我们的积分将基于NEM区块链来实施了,App将会基于Laravel框架,同时我们也必须选择使用哪种支付方式来接受资金。

不同的玩家分布于不同的市场上,支持多种支付方式的最友好最成熟的开发者是Stripe,由于我们的核心市场是中国,因此Stripe支持支付宝和微信支付,这两种支付方式主导了中国市场。

整体构造

我们来回顾一下我们要构建的系统的体系结构。整个系统由几个部分组成。

 

Laravel应用程序

Laravel是一个运用HTML页面和商业逻辑的网站,用于控制用户、支付、货物和积分等等。它驻留在服务器A上,具有公共访问互联网和处理用户的请求。

它拥有一套控制资金流和奖励积分流通的智能合约。

它与Stripe服务器连接并可以处理简单的费用收取流程。

多重签名Laravel应用程序

这是一个重要的附加安全措施(类似于双重身份认证)。它被用来共同签署有效的交易。该应用程序驻留在专用服务器B上,与电子商务应用程序没有直接连接。如果商务应用程序受到了攻击(黑客攻击),它可以防止我们钱包上的资金被盗。

共同签署者收听正在进行的交易时,可以审查他们,并验证这笔交易的合法性,然后在NEM区块链上签署交易。

NEM区块链

NEM的节点网络遍布全球,他提供了HTTP API并可以将其作为任何其他服务使用。

要使用公共区块链时,我们需要将XEM加载到我们的账户上,因为链上的每个交易都需要支付费用,这就是为什么我们需要保护好我们的资金的原因了。

我建议您阅读NEM的技术概述以获得更深入的见解。如果你对NEM内部的更多细节感兴趣,请看这篇博文

Stripe服务

运用远程服务处理付款并提供统一的HTTP API。它接受付款并处理请求,处理结束后会提醒Laveral应用程序它的处理结果。

成功付款后,Laravel应用程序会执行一个适当的智能合约,这个合约会奖励支付者积分点数。

 

私钥分配

有四个账户用于管理平台(每个都有公钥和私钥)。这四个账户分布在两台服务器上:

  • 电子商务App, Server A
    这台服务器是公开的。
  • 多重签名 App, Server B
    这台服务器是独立的,有公共访问权限。 它只能与NEM区块链和共享数据存储进行交互 (也可以通过电子商务App访问)。

4个账户有不同的用途:

  • Account_1. 密钥储存于 server A.
    由多重签名Account_2发起积分转移。
  • Account_2. 密钥储存于 server A.
    这是一个多重签名账户(3个中的2个) ,储存XEM和初始数量的积分。转移资产的唯一方法是发起一个交易,这个交易必须被联名签署确认。
  • Account_3. 密钥储存于server B.
    这是Account_2的联名账户.
  • Account_4. 密钥储存于server B.
    这是Account_2的联名账户。

这里账户 Account_2有3个联名,发起一笔交易必须有2个以上的签名,即令这个账户成为一个2/3签名账户。 需要3个签名者来保障系统安全。 Account_3和Account_4将其密钥储存于专用服务器上,由其中一个发起多重签名交易。

为了防止Account_1和Account_2的私钥失效,我们对Account_2的资产保持控制,因为其余的密钥储存于另一台服务器。

NEM智能合约

NEM平台不支持“链上”智能合约。不同于以太坊直接在区块链上发布智能合约,NEM提供安全的API,可以通过“链外”智能合约来消费。

我们的系统有几个与NEM交互的智能合约:

  • 为每个新客户创建多重签名账户
  • 客户在每次成功消费后获得积分
  • 接收并验证待处理的交易,共同签署其中有效的交易

 

准备NEM测试节点

    要与NEM进行交互,你需要一个具有API并响应你的请求的运行节点。你可以在本地运行节点或使用现存的网络节点。在本教程中我们使用现存的节点https://nem-test.familypoints.io:7891 ,将其连接到测试NEM的网络。

    一点注意:最好不要与远程节点进行交互,为确保安全,请运行本地节点并直接与其交互。

你需要在你的服务器上运行你自己的节点,为了启动节点,你需要做的:

  1. 安装64位版本的JAVA
  2. 这里下载并提取最新版本

wget http://bob.nem.ninja/nis-0.6.95.tgz

sudo tar xzf nis-0.6.95.tgz

  1. 编辑配置文件 nis/config.properties.
  2. 运行NIS节点

./nix.runNis.sh

  1. 测试它是否可以访问

http -b https://nem-test.familypoints.io:7891/status

{

“code”: 5, “message”: “status”, “type”: 4

}

Code 5表示节点5仍在同步,一段时间后就会全面运行

准备4个账户

如前文所述,我们需要做4个账户,通过发送一个GET请求来生成一个账户很容易:

http -b https://nem-test.familypoints.io:7891/account/generate

{

“address”: “TDBEUBX6SJDSO64NDAU3QMHOCAPWLFGYD4KCOV3E”, “privateKey”: “54cce7c2422c8307488a4dd2ae6ac22fb0e2e2c9d3ca05081312020fb7882a68”, “publicKey”: “705803b12a02b8e32a4d4f1d8c8c3d0ddb0bd87fbc1dca30ebbd6cc12f59530d”

}

记下生成的4个密钥和地址:

Account_1

{“privateKey”:“…”,“address”:“…”,“publicKey”:“…”}

Account_2

{“privateKey”:“…”,“address”:“…”,“publicKey”:“…”}

Account_3

{“privateKey”:“…”,“address”:“…”,“publicKey”:“…”}

Account_4

{“privateKey”:“…”,“address”:“…”,“publicKey”:“…”}

转换成多重签名账户

现在,必须将 Account_2 转换成多重签名账户,按如下步骤:

  1. 用34个XEM加载账户(这是转换一个账户的费用)。
  2. 启动转换交易。

截止目前, NEM还不支持批量交易,所以我们不能在一次交易中同时提交这两个操作,但即将发布的“投石车”会为我们解决这个问题。

如何将测试用的XEM加载到 Account_2?最简单的方法是利用现有的接口,比如这里: http://test-nem-faucet.44uk.net/,访问该页面并发送约 40 个XEM到账户地址。

现在我们来发送多重签名账户转换请求。我们需要准备 一个复杂的架构,其中包含各种不同类型的数据。我添加了一个为我们生成json数据的控制台指令。源代码在这里. 像这样调用指令:

php convertToMultisigJSON.php “account2_publickKey” “account2_privateKey” “account1_publickKey” “account3_publickKey” “account4_publickKey”

现在将这个文件的输出传递给NIS,如下所示:

php convertToMultisigJSON.php “account2_publickKey” \ “account2_privateKey” “account1_publickKey” “account3_publickKey” \ “account4_publickKey” | http https://nem-test.familypoints.io:7891/transaction/prepare-announce –json

# if went well, the result should look like this

{

“code”: 1, “innerTransactionHash”: {}, “message”: “SUCCESS”, “transactionHash”: { “data”: “1a9…” },

“type”: 1

}

现在我们有了一个多重签名账户和3个共同签署人。这里是向这个新账户发送XEM的最佳时机,这样它可以将资产发给其他客户。

创造积分资产

积分是我们对客户消费行为的奖励资产,在NEM区块链上资产被叫作“马赛克”并放在特定命名空间下(就像文件夹中的文件一样)。我们需要配置我们的根命名空间并创造一种马赛克。

配置命名空间

我们创建一个名为“my-company”的命名空间作为资产的容器。将 PHP脚本的输出传递给NIS,如下所示:

php provisionNamespaceJSON.php “account1_publickKey” “account1_privateKey” \ “my-company” | http https://nem-test.familypoints.io:7891/transaction/prepare-announce –json

# if went well, the result should look like this

{

“code”: 1, “innerTransactionHash”: {}, “message”: “SUCCESS”, “transactionHash”: { “data”: “…” },

“type”: 1

}

创造马赛克

马赛克是一种真实资产—-奖励积分,它拥有一个名称、描述、可分性和一些其他的标志。我们这样定义我们的资产( PHP脚本):

php createMosaicJSON.php “account1_publickKey” “account1_privateKey” “my-company” “points” “Rewarding points” “6” “1000” | http https://nem-test.familypoints.io:7891/transaction/prepare-announce –json

# if went well, the result should look like this

{

“code”: 1, “innerTransactionHash”: {}, “message”: “SUCCESS”, “transactionHash”: { “data”: “…” },

“type”: 1

}

现在我们准备好了NEM的基础结构:

  • 运行中的NIS节点
  • 创建并保护了多重签名账户来存储资产
  • 配置了命名空间和资产

结论

     NEM提供了独一无二的API,可以很容易地整合到任何现存的App中。只需要读取一个文档就能开始使用NEM。在本教程中,我们描述并公开了一个App来用积分奖励客户的消费行为。由区块链技术提供支持,以安全的方式完成。

目前可用的库:

希望读者能对NEM有所了解,并准好探索更多内容。

下一篇:

     在下一篇文章(part2)中,我们将介绍:

  • 多重签名App。接收未处理的交易并共同签署它们
  • 电子商务 通过Stripe进行支付并转移奖励积分

链接:

 

原文链接:https://medium.com/@familypoints/rewards-points-platform-made-simple-nem-laravel-5-5-stripe-part-i-27dc4d269856

翻译:Ronica Hu & Ethan Feng

编辑:Ethan Feng

 

分享到:更多 ()

一个新的经济引擎-NEM

加入QQ群英文官网