# hms-wallet-severdemo
**Repository Path**: hms-core/hms-wallet-severdemo
## Basic Information
- **Project Name**: hms-wallet-severdemo
- **Description**: 华为钱包服务服务端示例代码介绍了如何调用华为钱包服务器接口。华为钱包服务器提供多个REST接口,支持六类卡券:会员卡、优惠券、礼品卡、登机牌、交通车票和活动门票
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: Java
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 6
- **Created**: 2021-02-20
- **Last Updated**: 2024-10-02
## Categories & Tags
**Categories**: hms, harmonyos-payment
**Tags**: None
## README
# 华为钱包服务服务端示例代码
### 目录
* [安装](#安装)
* [环境要求](#环境要求)
* [申请华为钱包服务](#申请华为钱包服务)
* [配置参数](#配置参数)
* [配置模板和实例](#配置模板和实例)
* [编译Maven工程](#编译Maven工程)
* [示例方法](#示例方法)
1. [卡券模板示例方法](#卡券模板示例方法)
1. [卡券实例示例方法](#卡券实例示例方法)
1. [生成JWE](#生成JWE)
1. [验签](#验签)
* [技术支持](#技术支持)
* [授权许可](#授权许可)
## 简介
华为钱包服务(HUAWEI Wallet Kit)服务端示例代码介绍了如何调用华为钱包服务器接口。华为钱包服务器提供多个REST接口,支持六类卡券(会员卡、优惠券、礼品卡、登机牌、交通车票和活动门票)。您可以调用这些接口进行卡券添加、查询、更新等操作。
在使用此示例代码前,您需在华为开发者联盟上创建一个开发者账号,并在[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)上创建一个应用。该应用仅表明您要申请使用华为钱包服务,并不一定是手机上的真实应用,因此即使您不打算开发端侧应用,也需要进行此操作。详情请参阅[注册账号](https://developer.huawei.com/consumer/cn/doc/start/10104)和[创建应用](https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-create_app)。
## 环境要求
示例代码的运行环境为Maven和Oracle Java(1.8.0.211及以上版本)。
## 申请华为钱包服务
参照[开通服务](https://developer.huawei.com/consumer/en/doc/distribution/app/agc-enable_service) 申请华为钱包服务。
请注意在申请钱包服务的过程中需要创建一个服务号,该服务号即为passTypeIdentifier的值,后续将在配置示例代码中用到。
您在申请过程中还会创建一对RSA公私钥,请妥善保管。其中私钥用于后续对JWE进行签名 (详情请参阅 [生成JWE](#generate-jwe)). 公钥用于钱包服务器验签。
在设置完一类卡券的服务号之后,你就可以运行这个卡券对应的示例代码了。如果你想测试其他卡券,则需申请其他卡券的服务号。
## 配置参数
运行示例代码前,在”src\test\resources\release.config.properties”文件中配置如下参数:”gw.appid”, “gw.appid.secret”, “gw.tokenUrl”, “walletServerBaseUrl”, “servicePrivateKey”和“walletWebsiteBaseUrl”。
#### 设置 "gw.appid" and "gw.appid.secret":
"gw.appid"和"gw.appid.secret"为应用的"APP ID"和"SecretKey"。登录[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html),点击“我的应用”,选择目标应用,即可找到该应用的APP ID和SecretKey。
#### 设置 "gw.tokenUrl"
将gw.tokenUrl设置为https://oauth-login.cloud.huawei.com/oauth2/v3/token,即获取REST接口认证token的地址。
#### 设置 "walletServerBaseUrl":
"walletServerBaseUrl" 为REST接口请求的公共部分,格式为https://{walletkit_server_url}/hmspass。其中{walletkit_server_url}需要根据您的账号所属国家/地区自行替换,如下表:
| 国家/地区 | walletkit_server_url |
|------------------ |------------------------------------- |
| 中国大陆 | wallet-passentrust-drcn.cloud.huawei.com.cn |
| 亚洲 | wallet-passentrust-dra.cloud.huawei.asia |
| 欧洲 | wallet-passentrust-dre.cloud.huawei.eu |
| 拉丁美洲 | wallet-passentrust-dra.cloud.huawei.lat |
| 俄罗斯 | wallet-passentrust-drru.cloud.huawei.ru |
#### 设置 "servicePrivateKety"
将"servicePrivateKey"设置为您在[申请华为钱包服务](#申请华为钱包服务)时生成的RSA私钥。您将用此参数对JWE进行签名。
#### 设置 "walletWebsiteBaseUrl"
"walletWebsiteBaseUrl" 是华为钱包H5服务器地址,格式为https://{walletkit_website_url}/walletkit/consumer/pass/save。其中{walletkit_server_url}需要根据您的账号所属国家/地区自行替换,如下表:
| 国家/地区 | walletkit_website_url |
|-------------------|------------------------------------ |
| 中国大陆 | walletpass-drcn.cloud.huawei.com |
| 亚洲 | walletpass-dra.cloud.huawei.com |
| 欧洲 | walletpass-dre.cloud.huawei.com |
| 拉丁美洲 | walletpass-dra.cloud.huawei.com |
| 俄罗斯 | walletpass-drru.cloud.huawei.com |
## 卡券模板和实例
一个模板代表一种卡券。同一模板下的实例会共享某些参数。例如,一个登机牌模板含有出发和抵达时间等信息,而一个登机牌实例则含有某乘客的姓名、座位号、登机顺序等信息。每一个卡券实例都有一个对应的模板。因此,您需要先创建一个卡券模板,然后才能创建卡券并进行其他操作。
所有卡券模板和实例的数据类型均为HwWalletObject。详情请参阅[HwWalletObject Definition](https://developer.huawei.com/consumer/en/doc/development/HMSCore-References-V5/def-0000001050160319-V5) for more details.
在示例代码中,卡券模板和实例的入参均通过"src\test\resources\data"文件夹下的JSON文件传入。您可以自行修改JSON文件来生成您想要的卡券。
请把JSON文件中"passTypeIdentifier"的值设置为您在[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)上设置的服务号。
## 编译Maven工程
设置完上述参数后,请将示例代码编译为Maven工程。将全部依赖部署完毕可能要花几分钟时间,具体取决于您的配置文件和网络状况。
## 示例方法
### 卡券模板示例方法
#### 1. 创建一个卡券模板
华为钱包服务器提供REST接口用于创建卡券模板。例如,您可通过调用createLoyaltyModel添加会员卡模板到服务器数据库,具体请参阅[创建会员卡模板](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/create-model-0000001050158390-V5)。添加其他类型卡券方法类似。调用其他相关方法前须先创建卡券模板。
#### 2. 查询单个卡券模板
华为钱包服务器提供REST接口用于根据模板ID查询卡券模板。例如,您可通过调用getLoyaltyModel查询会员卡模板,详情请参阅[单个查询会员卡模板](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/query-model-0000001050160345-V5)。查询其他类型卡券模板方法类似。
#### 3. 查询卡券模板列表
如果您创建了多个同一卡券类型的模板(如金卡模板和钻石卡模板),您可通过调用相应接口查询模板列表。例如,可通过调用getLoyaltyModelList查询会员卡模板列表,详情请参阅[批量查询会员卡模板](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/list-model-0000001050158392-V5)。查询其他类型卡券模板列表方法类似。
#### 4. 全量更新卡券模板
华为钱包服务器提供REST接口用于根据模板ID全量更新卡券模板。例如,可通过调用fullUpdateLoyaltyModel全量更新会员卡模板,详情请参阅[全量更新会员卡模板](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/overwrite-model-0000001050160347-V5)。全量更新其他类型卡券模板方法类似。
#### 5. 局部更新卡券模板
华为钱包提供REST接口用于根据模板ID局部更新卡券模板。例如,可通过调用partialUpdateLoyaltyModel局部更新会员卡模板,详情请参阅[局部更新会员卡模板](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/update-model-0000001050158394-V5)。局部更新其他类型卡券模板方法类似。
#### 6. 增加消息到卡券模板
华为钱包提供REST接口用于添加消息到卡券模板。例如,您可通过调用addMessageToLoyaltyModel添加消息到会员卡模板。详情请参阅会员卡模板增加message。添加消息到其他类型模板方法类似。卡券模板中messageList表示消息列表,最多支持十条消息。如果已添加的消息数量达到十条,继续添加将导致最早的消息被删除。
### 卡券实例示例方法
#### 1. 新增一个卡券实例
华为钱包服务器提供REST接口用于新增卡券实例。例如,可通过调用createLoyaltyInstance新增会员卡实例到服务器数据库,详情请参阅[新增会员卡实例](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/add-instance-0000001050158396-V5)。新增其他类型卡券实例方法类似。创建实例前,您需先创建该实例所属的模板。
#### 2. 查询卡券实例
华为钱包服务器提供REST接口用于根据实例ID查询卡券实例。例如,可通过调用getLoyaltyInstance查询会员卡实例,详情可参阅查询会员卡实例。查询其他类型卡券方法类似。
#### 3. 全量更新卡券实例
华为钱包服务器提供REST接口用于根据实例ID全量更新卡券实例。例如,可通过调用fullUpdateLoyaltyInstance全量更新会员卡实例,详情请参阅[全量更新会员卡实例](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/overwrite-instance-0000001050160353-V5)。全量更新其他类型卡券实例方法类似。
#### 4. 局部更新卡券实例
华为钱包服务器提供REST接口用于根据实例ID局部更新卡券实例。例如,可通过调用partialUpdateLoyaltyInstance局部更新会员卡实例,详情请参阅[局部更新会员卡实例](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/update-instance-0000001050158400-V5)。局部更新其他类型卡券实例方法类似。
#### 5. 添加消息到卡券实例
华为钱包服务器提供REST接口用于添加消息到卡券实例。例如,可通过调用addMessageToLoyaltyInstance增加消息到某个会员卡实例,详情请参阅[会员卡实例增加message](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/instance-add-message-0000001050160355-V5)。增加消息到其他类型卡券实例方法类似。messageList是卡券实例的一个属性,最多支持十条消息。如果已添加的消息达到十条,继续添加将导致最早的消息被删除。
#### 6. 关联/去关联会员卡实例的优惠券实例
本接口仅适用于会员卡实例。可通过调用updateLinkedOffersToLoyaltyInstance为一个会员卡实例新增或删除关联的优惠券实例。详情请参阅[关联/去关联优惠券实例](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/link-offer-instance-0000001050158402-V5)。在调用此接口用于关联优惠券前,需确保想要关联的优惠券实例存在于钱包服务器中,否则客户端无法展示该优惠券。您要关联的优惠券可以属于其他应用。
### 生成JWE
您需要生成JWE字符串并发送到[华为钱包H5服务器](#set-"walletwebsitebaseurl"),从而将卡券与某个华为钱包用户绑定。
您可通过以下两种方式生成JWE。第一种方法: 生成包含完整卡券实例信息的JWE并发送到华为钱包H5服务器。此时您无需调用[添加卡券实例](https://github.com/HMS-Core/hms-wallet-severdemo#add-a-pass-instance)接口。第二种方法:调用接口[添加卡券实例](https://github.com/HMS-Core/hms-wallet-severdemo#add-a-pass-instance)到钱包服务器,生成仅含卡券实例ID信息的瘦JWE并发送到华为钱包H5服务器,从而将卡券实例与某个用户绑定。
本示例代码提供生成JWE和瘦JWE的方法供您参考。更多信息请参阅[网页集成“添加到华为钱包”按钮领取卡券](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/guide-webpage-0000001050042334-V5)中“生成JWE并发送到华为服务器”和“生成瘦JWE并发送到华为服务器”部分。
### 验签
若您在[申请华为钱包服务](#apply-for-wallet-kit-service)过程中设置了回调地址或NFC回调地址,您可接收到华为钱包服务器发送的通知请求。此类请求的请求头携带了签名,您需用华为提供的固定公钥验证该签名。您可参考示例代码中的verifySignature进行验签。详情请参阅[回调接口公共定义](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/public-0000001050158472-V5)。
## 技术支持
如果您对HMS Core还处于评估阶段,可在[Reddit社区](https://www.reddit.com/r/HuaweiDevelopers/)获取关于HMS Core的最新讯息,并与其他开发者交流见解。
如果您对使用HMS示例代码有疑问,请尝试:
- 开发过程遇到问题上[Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services),在`huawei-mobile-services`标签下提问,有华为研发专家在线一对一解决您的问题。
- 到[华为开发者论坛](https://developer.huawei.com/consumer/cn/forum/blockdisplay?fid=18) HMS Core板块与其他开发者进行交流。
如果您在尝试示例代码中遇到问题,请向仓库提交[issue](https://github.com/HMS-Core/hms-wallet-severdemo/issues),也欢迎您提交[Pull Request](https://github.com/HMS-Core/hms-wallet-severdemo/pulls)。
## 授权许可
华为钱包服务服务端示例代码经过[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0)授权许可.