# Apple Pay & Google Pay

## 一、Checkout页面集成 <a href="#xeoq5" id="xeoq5"></a>

Checkout页面集成是Apple Pay 和 Google Pay最简单的集成方式，Asiabill托管支付页面会向用户提供Apple pay/Google pay的支付按钮选项。

如果商家已经对接过跳转支付模式，不需要进行二次开发，申请开通后即可使用；

<figure><img src="https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FI9Eptr5IBJ8xaU9hjrYe%2Fimage.png?alt=media&#x26;token=0c8cf870-fa41-4007-b415-f7c4ac32dbb1" alt=""><figcaption></figcaption></figure>

### 1.checkout流程图 <a href="#c0qo5" id="c0qo5"></a>

<figure><img src="https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FJl4BNoYJa9jbf2hjNZGP%2Fcheckout%E6%B5%81%E7%A8%8B%E5%9B%BE.drawio.png?alt=media&#x26;token=09ae8182-802e-4cc3-82a5-0b9ceb982917" alt=""><figcaption></figcaption></figure>

### 2.商户开通步骤 <a href="#xrneh" id="xrneh"></a>

联系Asiabill客服进行开通

## 二、商户自主集成流程 <a href="#jbwtg" id="jbwtg"></a>

自主集成流程可自定义程度高，需要对接商家具有一定的技术开发能力；对接该流程能使支付按钮更契合商户网站，且无需跳转离开商家网站；

<figure><img src="https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FUEtnTucpeq4N8NpADkn7%2Fimage.png?alt=media&#x26;token=ce6467e0-97d8-43da-a18d-2b76e5b86a1c" alt=""><figcaption></figcaption></figure>

### 1.自主集成流程图 <a href="#ydz7l" id="ydz7l"></a>

<figure><img src="https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FA8SIBA7w6sGpV58FvqMV%2F%E5%95%86%E6%88%B7%E9%9B%86%E6%88%90.drawio.png?alt=media&#x26;token=f44f02f8-03d2-4aa0-8fac-9e928feb5a41" alt=""><figcaption></figcaption></figure>

### 2.对接步骤 <a href="#cjoa7" id="cjoa7"></a>

#### 1. 创建sessionToken <mark style="color:blue;">**`server`**</mark>

商户服务端调用 [/sessionToken接口](https://asiabill.gitbook.io/api-explorer/api-reference/jiao-yi/sessiontoken)创建本次交易的会话即 **sessionToken。**

{% hint style="info" %}
建议商户通过服务端调用 **/sessionToken** 接口通过该接口可以获取到 **sessionToken**，该参数会用于后续支付流程的处理，商户需要从 **server** 端传递到 **web** 端供SDK中的API使用，请妥善保存，避免 **signkey** 等信息暴露在浏览器客户端。
{% endhint %}

#### 2. 加载 js sdk，需要加载 AsiabillPayment.min.js 到商城页面中

```http
https://{paymentApiUrl}/static/v3/js/AsiabillPayment.min.js
```

[{paymentApiUrl}](https://asiabill.gitbook.io/api-explorer/#4-huan-jing-can-shu) 为对应环境的url，请从链接地址获取url

#### 3. 初始化sdk文件

```javascript
let ab = AsiabillPay(sessionToken);//sessionToken为第一步后端获取的sessionToken
```

#### 4. 增加以下的参数 fastPayment 对象

```json
let fastPayment ={
    "billingDetailRequire": false, //账单信息是否从按钮中获取，默认false，false自定义billingDetail内容，true系统自动获取		非必填
    "shippingDetailRequire": false, //收件人信息是否从按钮中获取，默认false，true则返回shippingDetail，false则不返回	          非必填
    "shippingEmail": "123@163.com", //shippingDetailRequire为false，必填
    "shippingPhone": "18888888888", //shippingDetailRequire为false，必填
    "shippingOptionsRequire": true, //是否需要更改运送方式 非必填
    "allowedCountryCodes": [
        "US",
        "HK",
        "AU",
        "CN"
    ], //Google pay 支持的收件地址国家，非必填，为空则默认支持所有国家
    "googleId": "gpay_container", //Google pay区域 id,			必填
    "gatewayNo": document.getElementById("gatewayNo_").value, //网关号,			必填
    "googleStyle": { //Google pay按钮样式，具体设置详见第三小节，样式设置，非必填
        "buttonType": "checkout", //按钮类型
        "buttonColor": "black", //按钮颜色，支持black和white
        "buttonLocale": "fr" //按钮显示语言
    },
    "billingDetail": { //当billingDetailRequire为false或者为空时，必填，字段名不可修改
        "address": { //地址
            "city": "", //所在的城市
            "country": "", //联系人的两个字母 ISO 3166 国家/地区代码
            "line1": "", //详细地址
            "postalCode": "", //邮政编码
            "state": "", //州
        },
        "firstName": "", //名字
        "lastName": "", //姓氏
        "phone": "", //电话号码
        "email": "", //邮箱
    },
    "merchantName": "", //收款人名称，必填
    "appleId": "apple-pay-button", //apple pay 区域 id,			必填
    "shippingOptions": [ //若shippingOptionsRequire为true，则此项必填，且字段名不可更改
        {
            "id": "shipping-001", //运送方式id
            "label": "$1.00: Free shipping", //运送标签
            "description": "Free Shipping delivered in 5 business days.", //运送方式描述
            "amount": "100" //运费
        }
    ]
}
```

#### 5. 在界面需要展示Google pay 或 Apple Pay按钮的区域新增元素（需给定一个id）

```html
<apple-pay-button buttonstyle="black" id="apple-pay-button" type="plain" locale="en-US"></apple-pay-button>
<div id="gpay_container"></div>
```

#### 6. 执行以下方法进行按钮初始化，成功后会根据用户环境展示相应的Google pay或Apple pay按钮

```javascript
ab.elementInit("fastPayment", fastPayment);
```

#### 7. 执行updateFastPayment（）方法，传入金额，币种及国家，然后点击按钮操作，之后可通过自定义事件getResultData获取Google pay和Apple pay返回的数据以及错误信息

```javascript
ab.updateFastPayment({
				currencyCode:"USD",
				totalPrice: “100”,
				countryCode:"HK"
		}).then((res)=>{})
```

#### 8.监听自定义事件getShippingCountry，获取用户修改后的收件人国家，商户可自定义根据收件人国家更新物流运输方式

```javascript
window.addEventListener("getShippingCountry", e => {
  console.log(`getShippingCountry`, e);
  let res = e.detail;
  if(res.shippingCountryCode!=""){
    let shippingOptionsList=[
      {
        "id": "shipping-004",//运送方式id
        "label": "aaaaa",//运送标签
        "description": "Free Shipping delivered in 5 business days.",//运送方式描述
        "amount":"500"//运费
      },{
        "id": "shipping-005",//运送方式id
        "label": "bbbbb",//运送标签
        "description": "Free Shipping delivered in 5 business days.",//运送方式描述
        "amount":"600"//运费
      },{
        "id": "shipping-006",//运送方式id
        "label": "ccccc",//运送标签
        "description": "Free Shipping delivered in 5 business days.",//运送方式描述
        "amount":"700"//运费
      },
    ]
    //重新定义运送方式后，执行updateShippingOptions方法进行更新运送方式列表
    ab.updateShippingOptions(shippingOptionsList).then((res)=>{
      console.log("updateShippingOptions",res);
    })
  }
});
```

{% hint style="info" %}
当商家需要根据收件人国家来变更运输方式时，建议初始化对象里面 shippingOptions 默认一个免费运输方式；当初始化完成时会触发 getShippingCountry 监听事件，再根据获取到的信息来变更运输方式
{% endhint %}

#### 9. 点击按钮操作完成后，可通过getResultData()方法获取Google pay和Apple pay返回的数据，包括shippingDetail、billingDetail、paymentMethodId、shippingOptionsId、orderAmount

```javascript
window.addEventListener("getResultData",e => {
				let res3=e.detail
				console.log("resultGoogle",res3);
			})
```

返回报文结构如下

```json
res={
  "code": "0000", 
  "msg": "Successful", 
  "data": {
    "shippingDetail":{//收件人信息
      "address":{//地址
        "city":shippingAddress.locality,//所在的城市
        "country": shippingAddress.countryCode,//联系人的两个字母 ISO 3166 国家/地区代码
        "line1": shippingAddress.address1 + shippingAddress.address2 + shippingAddress.address3,//详细地址
        "postalCode": shippingAddress.postalCode,//邮政编码
        "state": shippingAddress.administrativeArea,//收件人的州
      },
      "firstName":  shippingAddress.name.substring(0,shippingIndex),//名字
      "lastName":  shippingAddress.name.substring(shippingIndex+1),//姓氏
      "phone": shippingAddress.phoneNumber,//电话号码
      "email":paymentData.email,//邮箱
    },
    "paymentMethodId":scriptParam.paymentMethodId,//支付方式id
    "shippingOptionsId":paymentData.shippingOptionData.id,//运送方式id
    "billingDetail":{//账单信息
      "address":{//地址
        "city":billingAddress.locality,//所在的城市
        "country": billingAddress.countryCode,//联系人的两个字母 ISO 3166 国家/地区代码
        "line1": billingAddress.address1 + billingAddress.address2 + billingAddress.address3,//详细地址
        "postalCode": billingAddress.postalCode,//邮政编码
        "state": billingAddress.administrativeArea,//联系人的州
      },
      "firstName":  billingAddress.name.substring(0,billingIndex),//名字
      "lastName":  billingAddress.name.substring(billingIndex+1),//姓氏
      "phone": billingAddress.phoneNumber,//电话号码
      "email":paymentData.email,//邮箱
    },
    "orderAmount":totalPrice,//付款总金额
  }
}
```

#### 10. 发起扣款 <mark style="color:blue;">**`server`**</mark>

商户可通过服务端调用[/confirmCharge](https://asiabill.gitbook.io/api-explorer/api-reference/jiao-yi/confirm-charge)发起扣款业务。

{% hint style="info" %}
customerPaymentMethodId 和 shipping 收件人信息使用前面步骤SDK获取到的值
{% endhint %}

#### 11. 进行扣款操作后，执行以下方法，参数为[/confirmCharge](https://asiabill.gitbook.io/api-explorer/api-reference/jiao-yi/confirm-charge)接口返回的 orderStatus 参数（建议，如果接口调用失败的情况，建议传入 pending 状态）

```javascript
ab.getConfirmStatus(code)
```

### 3.样式设置 <a href="#hlejn" id="hlejn"></a>

#### Google Pay <a href="#tjw23" id="tjw23"></a>

初始化时Google Pay样式参数

| 参数名称         | 描述   | 可传入值                                               |
| ------------ | ---- | -------------------------------------------------- |
| buttonType   | 按钮类型 | book、buy、checkout、donate、order、pay、plain、subscribe |
| buttonColor  | 按钮颜色 | black、white                                        |
| buttonLocale | 按钮语言 | 语言简称小写，例如：中文 zh，英文 en                              |

按钮类型展示如下：

|  ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2Fzbq2AW0VSKRqlWffSzfJ%2Fimage.png?alt=media\&token=1afdfe07-d673-4c9d-b8e7-b5930075929a)book  |    ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FJOy90J0jsrnfmFYHU3B2%2Fimage.png?alt=media\&token=4b0216c7-83f2-49a1-9ac5-ef844024898a)buy    | ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FThyRvN4YczpI575h6YTv%2Fimage.png?alt=media\&token=3f9e75a6-dfa0-4b59-b577-3177142c42cb)checkout |
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FHo2hc4gQXTSnQYhC2KLh%2Fimage.png?alt=media\&token=b19467fc-abe8-41b7-93f5-d3043c177b76)donate |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FGLUoENkuEM6j1Wox50HE%2Fimage.png?alt=media\&token=570326a5-af80-43ee-b3bc-dd91bb31fbf7)order   |    ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FvLCwIqyuhCaarZ8gVfJs%2Fimage.png?alt=media\&token=94ee13ed-c389-42f0-9d47-2938469a4910)pay   |
|  ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FgWmALYzWkgviJgHQDCYY%2Fimage.png?alt=media\&token=4e0cb93f-02ce-45f9-85af-751f511d0a62)plain | ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FuYaIhg3kvNsmJNJ9COcG%2Fimage.png?alt=media\&token=27c329a1-909c-4848-9282-5711d28f547a)subscribe |                                                                                                                                                                                                                             |

按钮大小控制：

```css
#gpay_container{
       width:180px;
       height: 30px;
}
```

#### Apple Pay <a href="#d1fae" id="d1fae"></a>

在Apple Pay标签中的三个参数

| 参数名称        | 描述   | 可传入值                                                                                                                    |
| ----------- | ---- | ----------------------------------------------------------------------------------------------------------------------- |
| buttonstyle | 按钮颜色 | black、white-outline、white                                                                                               |
| type        | 按钮类型 | plain、add-money、book、buy、check-out、continue、contribute、donate、order、pay、reload、rent、set-up、subscribe、support、tip、top-up |
| locale      | 按钮语言 | 按照ISO语言格式标准，例如：en-US，zh-CN                                                                                              |

按钮类型展示如下：

|    ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FZgQ5tsoMbufqizQsyxaM%2Fimage.png?alt=media\&token=9292da5a-d6b2-43d7-b67d-c0958ef56c3d)plain   | ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FtESZOx0rFWNJtiWT5WM0%2Fimage.png?alt=media\&token=aafec0f7-94c0-45fd-9055-46f625ae947e)add-money |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FCIh3TUlSm5j49hhHaYIo%2Fimage.png?alt=media\&token=371135fb-86ea-4150-b2d8-d9b4f44cd5f4)book   |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|     ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2Fbyp39JZHSJrRNgeJRdSU%2Fimage.png?alt=media\&token=a27fae1e-2ec4-4f87-8d85-90f7e8cd55c4)buy    | ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FO7QYRIWW6by2kvjk7yL5%2Fimage.png?alt=media\&token=8f0cc16e-30bc-4aa7-969d-aa6e4a1fac7c)check-out | ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FOGQIDo3nURkiaFCwCLDR%2Fimage.png?alt=media\&token=d659e276-f88a-4c24-87e6-ff669bef4852)continue |
| ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FwKS5cOGz8oGiItNVYGR5%2Fimage.png?alt=media\&token=64d89e2f-7fca-4ea2-8b85-f4bba32869f9)contribute |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FJff6KVw6E2wU0IMQWsj3%2Fimage.png?alt=media\&token=bad78609-fc3b-4465-8b75-97dd18a53ae7)donate  |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2Fojobt3UJPiaOwhQ1joMT%2Fimage.png?alt=media\&token=9c0b29e1-a42b-4e77-a13c-1129f6c475a2)order  |
|     ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FdAcS1JqoUnXCRFBuriuu%2Fimage.png?alt=media\&token=96d1dfe4-95af-4dbc-8bf7-1249072028d0)pay    |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FOwAocnEyzj0o4WEqB3gw%2Fimage.png?alt=media\&token=48118a34-2c9e-44fd-b70b-3d0c22077c9b)reload  |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FC4fmI78WH1pLW8OtobpX%2Fimage.png?alt=media\&token=55baa332-427a-4cf4-a287-c0b07c7a6ec5)rent   |
|   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2F6CsBewRJSL7IEgxAX0OH%2Fimage.png?alt=media\&token=426eae90-8c7f-4991-abba-02a54a420ca2)set-up   | ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FBIpqUosGgKti3nT4JnFD%2Fimage.png?alt=media\&token=c6d10203-3d4e-4fe5-aebe-569eefd96810)subscribe |  ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FBQRPghE6GKVXFBOZeGaI%2Fimage.png?alt=media\&token=2fbbf3a4-c746-4cc1-824f-c54b4fd6d558)support |
|     ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2FXfZCfGi9B8XdVI3qa9xz%2Fimage.png?alt=media\&token=3b238389-c9ac-4bf2-b989-2bf4e5fe21c5)tip    |   ![](https://4182117768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcSYgMg71VCxeEVhWhVFp%2Fuploads%2Fw7rghsHW0ivVxwLKz5vd%2Fimage.png?alt=media\&token=b61bc7c9-57a8-47a7-a4e7-563d7c4b0f2a)top-up  |                                                                                                                                                                                                                             |

按钮样式可由CSS控制：

```css
<style>
apple-pay-button {
  --apple-pay-button-width: 150px;
  --apple-pay-button-height: 30px;
  --apple-pay-button-border-radius: 3px;
  --apple-pay-button-padding: 0px 0px;
  --apple-pay-button-box-sizing: border-box;
}
</style>
```

### 4.商户开通步骤 <a href="#nhhl3" id="nhhl3"></a>

1. 联系客服，提供商户网站交易域名，获取到服务器域名验证文件
2. 把域名验证文件放在服务器 https\://\[DOMAIN\_NAME]/.well-known/apple-developer-merchantid-domain-association 目录下，DOMAIN\_NAME 为提供给客服的交易域名
3. 通知Asiabill发送校验域名请求
4. 告知商家域名验证结果
5. 商家进行技术接口集成

### 5.测试账号信息

商户号：12230

&#x20;网关号：12230001

&#x20;signkey：12345678

{% hint style="info" %}
Google Pay 需加入[测试组群](https://developers.google.com/pay/api/android/guides/resources/test-card-suite?hl=zh-cn)后，才能进行测试支付
{% endhint %}

{% hint style="info" %}
Apple Pay 测试设备账号需联系 Asiabill 开发人员获取，测试卡号请参照[Apple Pay](https://developer.apple.com/apple-pay/sandbox-testing/)文档
{% endhint %}
