Skip to content

Commit e78db85

Browse files
Merge pull request #299 from AlphaWallet/alipay
WIP Alipay Samples
2 parents fa6df2c + 9876fde commit e78db85

File tree

14 files changed

+2048
-0
lines changed

14 files changed

+2048
-0
lines changed

examples/AliPay/Airline/Airline.en.shtml

Lines changed: 164 additions & 0 deletions
Large diffs are not rendered by default.

examples/AliPay/Airline/Airline.xml

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<!DOCTYPE token [
3+
<!ENTITY Airline.en SYSTEM "Airline.en.shtml">
4+
<!ENTITY style SYSTEM "../shared.css">
5+
]>
6+
<ts:token xmlns:ts="http://tokenscript.org/2019/10/tokenscript"
7+
xmlns="http://www.w3.org/1999/xhtml"
8+
xmlns:xml="http://www.w3.org/XML/1998/namespace"
9+
xsi:schemaLocation="http://tokenscript.org/2019/10/tokenscript http://tokenscript.org/2019/10/tokenscript.xsd"
10+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
11+
custodian="false"
12+
>
13+
<ts:name>
14+
<ts:plurals xml:lang="en">
15+
<ts:string quantity="one">Ticket</ts:string>
16+
<ts:string quantity="other">Tickets</ts:string>
17+
</ts:plurals>
18+
</ts:name>
19+
20+
<ts:contract name="Airline" interface="erc721">
21+
<ts:address network="100">0x6060c2bc6bcd71b528e9669ccac0faf17824e3cd</ts:address>
22+
</ts:contract>
23+
24+
<ts:origins>
25+
<!-- Define the contract which holds the token that the user will use -->
26+
<ts:ethereum contract="Airline">
27+
</ts:ethereum>
28+
</ts:origins>
29+
30+
<ts:cards>
31+
<ts:token-card>
32+
<style type="text/css">&style;</style>
33+
<ts:view-iconified xml:lang="en">
34+
&Airline.en;
35+
</ts:view-iconified>
36+
<ts:view xml:lang="en">
37+
&Airline.en;
38+
</ts:view>
39+
</ts:token-card>
40+
</ts:cards>
41+
42+
<ts:attribute-types>
43+
44+
<ts:attribute-type id="time" syntax="1.3.6.1.4.1.1466.115.121.1.24">
45+
<ts:name>
46+
<ts:string xml:lang="en">Time</ts:string>
47+
</ts:name>
48+
<ts:origins>
49+
<ts:token-id bitmask="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000" as="utf8">
50+
</ts:token-id>
51+
</ts:origins>
52+
</ts:attribute-type>
53+
54+
<ts:attribute-type id="locality" oid="2.5.4.7" syntax="1.3.6.1.4.1.1466.115.121.1.15">
55+
<ts:name>
56+
<ts:string xml:lang="en">City</ts:string>
57+
</ts:name>
58+
<ts:origins>
59+
<ts:token-id bitmask="000000000000000000000000000000000000FF00000000000000000000000000" as="uint">
60+
<ts:mapping>
61+
<ts:option key="1">
62+
<ts:value xml:lang="en">Shanghai</ts:value>
63+
</ts:option>
64+
<ts:option key="2">
65+
<ts:value xml:lang="en">London</ts:value>
66+
</ts:option>
67+
</ts:mapping>
68+
</ts:token-id>
69+
</ts:origins>
70+
</ts:attribute-type>
71+
72+
<ts:attribute-type id="venue" syntax="1.3.6.1.4.1.1466.115.121.1.15">
73+
<ts:name>
74+
<ts:string xml:lang="en">Venue</ts:string>
75+
</ts:name>
76+
<ts:origins>
77+
<ts:token-id bitmask="00000000000000000000000000000000000000FF000000000000000000000000" as="uint">
78+
<ts:mapping>
79+
<ts:option key="1">
80+
<ts:value xml:lang="en">Shanghai Pudong Airport</ts:value>
81+
</ts:option>
82+
<ts:option key="2">
83+
<ts:value xml:lang="en">London Heathrow Airport</ts:value>
84+
</ts:option>
85+
</ts:mapping>
86+
</ts:token-id>
87+
</ts:origins>
88+
</ts:attribute-type>
89+
90+
<ts:attribute-type id="countryA" syntax="1.3.6.1.4.1.1466.115.121.1.26">
91+
<!-- Intentionally avoid using countryName
92+
(SYNTAX 1.3.6.1.4.1.1466.115.121.1.11) per RFC 4519
93+
CountryName is two-characters long, not 3-characters.
94+
-->
95+
<ts:name>
96+
<ts:string xml:lang="en">From</ts:string>
97+
</ts:name>
98+
<ts:origins>
99+
<ts:token-id bitmask="0000000000000000000000000000000000000000FFFFFF000000000000000000" as="utf8"/>
100+
</ts:origins>
101+
</ts:attribute-type>
102+
103+
<ts:attribute-type id="countryB" syntax="1.3.6.1.4.1.1466.115.121.1.26">
104+
<ts:name>
105+
<ts:string xml:lang="en">To</ts:string>
106+
</ts:name>
107+
<ts:origins>
108+
<ts:token-id bitmask="0000000000000000000000000000000000000000000000FFFFFF000000000000" as="utf8"/>
109+
</ts:origins>
110+
</ts:attribute-type>
111+
112+
<ts:attribute-type id="category" syntax="1.3.6.1.4.1.1466.115.121.1.15">
113+
<ts:name>
114+
<ts:string xml:lang="en">Cat</ts:string>
115+
<ts:string xml:lang="zh">等级</ts:string>
116+
<ts:string xml:lang="es">Cat</ts:string>
117+
</ts:name>
118+
<ts:origins>
119+
<ts:token-id bitmask="000000000000000000000000000000000000000000000000000000FF00000000" as="uint">
120+
<ts:mapping>
121+
<ts:option key="1">
122+
<ts:value xml:lang="en">Business Class</ts:value>
123+
</ts:option>
124+
</ts:mapping>
125+
</ts:token-id>
126+
</ts:origins>
127+
</ts:attribute-type>
128+
129+
<ts:attribute-type id="numero" syntax="1.3.6.1.4.1.1466.115.121.1.27">
130+
<ts:name>
131+
<ts:string>№</ts:string>
132+
</ts:name>
133+
<ts:origins>
134+
<ts:token-id bitmask="00000000000000000000000000000000000000000000000000000000FFFF00" as="uint"/>
135+
</ts:origins>
136+
</ts:attribute-type>
137+
138+
<ts:attribute-type id="redeemed" syntax="1.3.6.1.4.1.1466.115.121.1.27">
139+
<ts:name>
140+
<ts:string>Redeemed</ts:string>
141+
</ts:name>
142+
<ts:origins>
143+
<ts:ethereum function="redeemed" contract="Airline" as="bool">
144+
<ts:data>
145+
<ts:uint256 ref="tokenId"/>
146+
</ts:data>
147+
</ts:ethereum>
148+
</ts:origins>
149+
</ts:attribute-type>
150+
151+
</ts:attribute-types>
152+
</ts:token>

examples/AliPay/Hotel/Hotel.en.shtml

Lines changed: 164 additions & 0 deletions
Large diffs are not rendered by default.

examples/AliPay/Hotel/Hotel.xml

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<!DOCTYPE token [
3+
<!ENTITY Hotel.en SYSTEM "Hotel.en.shtml">
4+
<!ENTITY style SYSTEM "../shared.css">
5+
]>
6+
<ts:token xmlns:ts="http://tokenscript.org/2019/10/tokenscript"
7+
xmlns="http://www.w3.org/1999/xhtml"
8+
xmlns:xml="http://www.w3.org/XML/1998/namespace"
9+
xsi:schemaLocation="http://tokenscript.org/2019/10/tokenscript http://tokenscript.org/2019/10/tokenscript.xsd"
10+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
11+
custodian="false"
12+
>
13+
<ts:name>
14+
<ts:plurals xml:lang="en">
15+
<ts:string quantity="one">Reservation</ts:string>
16+
<ts:string quantity="other">Reservations</ts:string>
17+
</ts:plurals>
18+
</ts:name>
19+
20+
<ts:contract name="Hotel" interface="erc721">
21+
<ts:address network="100">0x1391f80f4b7c5e88ae8354b9c1094236f89c8274</ts:address>
22+
</ts:contract>
23+
24+
<ts:origins>
25+
<!-- Define the contract which holds the token that the user will use -->
26+
<ts:ethereum contract="Hotel">
27+
</ts:ethereum>
28+
</ts:origins>
29+
30+
<ts:cards>
31+
<ts:token-card>
32+
<style type="text/css">&style;</style>
33+
<ts:view-iconified xml:lang="en">
34+
&Hotel.en;
35+
</ts:view-iconified>
36+
<ts:view xml:lang="en">
37+
&Hotel.en;
38+
</ts:view>
39+
</ts:token-card>
40+
</ts:cards>
41+
42+
<ts:attribute-types>
43+
44+
<ts:attribute-type id="time" syntax="1.3.6.1.4.1.1466.115.121.1.24">
45+
<ts:name>
46+
<ts:string xml:lang="en">Time</ts:string>
47+
</ts:name>
48+
<ts:origins>
49+
<ts:token-id bitmask="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000" as="utf8">
50+
</ts:token-id>
51+
</ts:origins>
52+
</ts:attribute-type>
53+
54+
<ts:attribute-type id="locality" oid="2.5.4.7" syntax="1.3.6.1.4.1.1466.115.121.1.15">
55+
<ts:name>
56+
<ts:string xml:lang="en">City</ts:string>
57+
</ts:name>
58+
<ts:origins>
59+
<ts:token-id bitmask="000000000000000000000000000000000000FF00000000000000000000000000" as="uint">
60+
<ts:mapping>
61+
<ts:option key="1">
62+
<ts:value xml:lang="en">Shanghai</ts:value>
63+
</ts:option>
64+
<ts:option key="2">
65+
<ts:value xml:lang="en">London</ts:value>
66+
</ts:option>
67+
</ts:mapping>
68+
</ts:token-id>
69+
</ts:origins>
70+
</ts:attribute-type>
71+
72+
<ts:attribute-type id="venue" syntax="1.3.6.1.4.1.1466.115.121.1.15">
73+
<ts:name>
74+
<ts:string xml:lang="en">Venue</ts:string>
75+
</ts:name>
76+
<ts:origins>
77+
<ts:token-id bitmask="00000000000000000000000000000000000000FF000000000000000000000000" as="uint">
78+
<ts:mapping>
79+
<ts:option key="1">
80+
<ts:value xml:lang="en">Hilton Resorts</ts:value>
81+
</ts:option>
82+
<ts:option key="2">
83+
<ts:value xml:lang="en">Trump Tower</ts:value>
84+
</ts:option>
85+
</ts:mapping>
86+
</ts:token-id>
87+
</ts:origins>
88+
</ts:attribute-type>
89+
90+
<ts:attribute-type id="category" syntax="1.3.6.1.4.1.1466.115.121.1.15">
91+
<ts:name>
92+
<ts:string xml:lang="en">Cat</ts:string>
93+
<ts:string xml:lang="zh">等级</ts:string>
94+
<ts:string xml:lang="es">Cat</ts:string>
95+
</ts:name>
96+
<ts:origins>
97+
<ts:token-id bitmask="000000000000000000000000000000000000000000000000000000FF00000000" as="uint">
98+
<ts:mapping>
99+
<ts:option key="1">
100+
<ts:value xml:lang="en">Executive Suite</ts:value>
101+
</ts:option>
102+
<ts:option key="2">
103+
<ts:value xml:lang="en">Deluxe Suite</ts:value>
104+
</ts:option>
105+
</ts:mapping>
106+
</ts:token-id>
107+
</ts:origins>
108+
</ts:attribute-type>
109+
110+
<ts:attribute-type id="numero" syntax="1.3.6.1.4.1.1466.115.121.1.27">
111+
<ts:name>
112+
<ts:string>№</ts:string>
113+
</ts:name>
114+
<ts:origins>
115+
<ts:token-id bitmask="00000000000000000000000000000000000000000000000000000000FFFF00" as="uint"/>
116+
</ts:origins>
117+
</ts:attribute-type>
118+
119+
<ts:attribute-type id="redeemed" syntax="1.3.6.1.4.1.1466.115.121.1.27">
120+
<ts:name>
121+
<ts:string>Redeemed</ts:string>
122+
</ts:name>
123+
<ts:origins>
124+
<ts:ethereum function="redeemed" contract="Hotel" as="bool">
125+
<ts:data>
126+
<ts:uint256 ref="tokenId"/>
127+
</ts:data>
128+
</ts:ethereum>
129+
</ts:origins>
130+
</ts:attribute-type>
131+
132+
</ts:attribute-types>
133+
</ts:token>

examples/AliPay/Makefile

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
XMLSECTOOL=xmlsectool
2+
KEYSTORE=
3+
KEY=1
4+
KEYPASSWORD=
5+
SIGNATURE_ALGORITHM=rsa-sha256
6+
7+
help:
8+
# Needs a target, example: $$ make EntryToken.canonicalized.xml
9+
#
10+
# Let's say you have a TokenScript "EntryToken.xml"
11+
#- to validate and canonicalize, add 'canonicalized' in the filename
12+
@echo $$ make EntryToken.canonicalized.xml
13+
# - to sign, use tsml as file extension:
14+
@echo $$ make EntryToken.tsml
15+
16+
%.canonicalized.xml : %.xml
17+
# xmlsectool canonicalises automatically when needed, but leaving an xml:base attribute which creates trouble later.
18+
# xmlstarlet does it neatly
19+
# XML Canonicalization
20+
xmlstarlet c14n $^ > $@
21+
# xmlsectool validates too, albeit adding xml:base with breaks schema. Example:
22+
# JVMOPTS=-Djavax.xml.accessExternalDTD=all /opt/xmlsectool-2.0.0/xmlsectool.sh --validateSchema --xsd --schemaDirectory ../../schema --inFile $^
23+
# XML Validation
24+
# if INVALID, run validation again with xmllint to get meaningful error
25+
# then delete the canonicalized file
26+
-xmlstarlet val --xsd http://tokenscript.org/2019/10/tokenscript/tokenscript.xsd $@ || (mv $@ [email protected]; xmllint --noout --schema http://tokenscript.org/2019/10/tokenscript/tokenscript.xsd [email protected])
27+
28+
%.tsml: %.canonicalized.xml
29+
ifeq (,$(KEYSTORE))
30+
@echo ---------------- Keystore missing. Try this ----------------
31+
@echo $$ make KEYSTORE=shong.wang.p12 KEYPASSWORD=shong.wang $@
32+
@echo replace it with your .p12 file and your password
33+
rm $^
34+
else
35+
$(XMLSECTOOL) --sign --keyInfoKeyName 'AliPay' --digest SHA-256 --signatureAlgorithm http://www.w3.org/2001/04/xmldsig-more#$(SIGNATURE_ALGORITHM) --inFile $^ --outFile $@ --keystore $(KEYSTORE) --keystoreType PKCS12 --key $(KEY) --keyPassword $(KEYPASSWORD) --signaturePosition LAST
36+
# removing the canonicalized created for validation
37+
rm $^
38+
endif

0 commit comments

Comments
 (0)