# 商户App集成IOTPay
# 基本流程
在App集成场景下,有4个参与的系统:
1, 商家的App
2, 商家的后台系统
3, IOTPay的API服务
4, 微信支付/支付宝/银联的服务
对于商户APP,商户发送支付请求到支付中心后,支付中心向商户返回加密数据且不向三方支付发送消息。商户利用接收到的加密数据调用三方支付的SDK,向三方支付发起支付请求。当支付中心收到三方支付 的支付消息后,支付中心通知商户支付结果。
# 商家App调用商家后台API
该API由商家自行定义,可参考的基本例子如下:
服务地址: https://merchant_server/pay?channelid=XXX&amount=xxx
- 请求方式: GET
商家后台收到App调用后,向IOTPay发起下单。
# App支付需指定ChannelId如下:
渠道ID | 渠道名称 |
---|---|
WX_APP | 商户APP微信支付 |
ALIPAY_MOBILE | 商户APP支付宝支付 |
UPI_APP | 银联SecurePay |
# 商家后台调用统一下单接口
# 请求URL
服务地址: https://api.iotpaycloud.com/v1/create_order
请求方式:
- POST
- Content-Type: application/x-www-form-urlencoded
# 参数说明
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
商户ID | mchId | 是 | String(30) | 10000701 | 支付中心分配的商户号 |
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的订单号,请保证唯一性 |
渠道ID | channelId | 是 | String(24) | ALIPAY_MOBILE | 见支付渠道参数 |
币种 | currency | 是 | String(3) | CAD | 三位货币代码,加币:CAD |
支付金额 | amount | 是 | int | 100 | 支付金额,单位分 |
客户端IP | clientIp | 是 | String(32) | 210.73.10.148 | 客户端IP地址 |
设备 | device | 否 | String(64) | WEB | 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB" |
支付结果回调URL | notifyUrl | 是 | String(200) | http://xxx.com/notify.php | 支付结果回调URL |
商品主题 | subject | 是 | String(64) | 测试商品 | 商品主题 |
商品描述信息 | body | 是 | String(255) | xxpay测试商品描述 | 商品描述信息 |
扩展参数1 | param1 | 否 | String(64) | 支付中心回调时会原样返回 | |
扩展参数2 | param2 | 否 | String(64) | 支付中心回调时会原样返回 | |
附加参数 | extra | 是 | String(512) | {"type":"apppay","appId":"xxxxxxxxx"} | appId从微信开放平台获取 |
子账号 | jobNo | 是 | String(50) | 商户登录名 | |
附言 | remarks | 否 | String(200) | 商户的附言 | |
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法 |
# 微信App支付(WX_APP)
| 附加参数 | extra | 是 | JSON | {"type":"apppay","appId":"xxxxxxxxx"} | |
# 支付宝App支付(ALIPAY_MOBILE) 或者 UPI_APP(银联SecurePay)
| 附加参数 | extra | 否 | JSON | 该参数不用传 | |
# php代码示例
require_once('Utility.php');
$url = 'http://api.iotpaycloud.com/v1/create_order';
$merchantId = '1000####';
$merchantKey = '##############################';
$channelId = $_REQUEST['channelid'];
$orderAmount = $_REQUEST['amount'];
$orderNo = $_SERVER['REQUEST_TIME'];
$Utility = new Utility();
$ip = $Utility->real_ip();
$notifyUrl = 'https://develop.iotpay.ca/demo/order/notify.php';
$subject = 'test';
$body = 'paytest';
$extra = '';
if($channelId =='WX_APP')
{
$appId = 'wxxxxxxxxxxxxxx';
$type = 'apppay';
$extra = json_encode(array(
'type' => $type,
'appId' => $appId,
));
}
$arr = array(
'mchId' => $merchantId,
'mchOrderNo' => $orderNo,
'extra' => $extra,
'channelId' => $channelId,
'currency' => 'CAD',
'amount' => intval($orderAmount * 100),
'clientIp' => $ip,
'device' => 'WEB',
'notifyUrl' => $notifyUrl,
'subject' => $subject,
'body' => $body,
);
$sortArray = $Utility->arg_sort($arr);
$arr['sign'] = $Utility->build_mysign($sortArray, $merchantKey, "MD5");//Generate signature parameter sign
$param = 'params=' . json_encode($arr);
$resBody = $Utility->request($url, $param);//Submit to the gateway
$res = json_decode($resBody, true);
echo json_encode($res['payParams']); //client app use payParams to call sdk
# 微信/支付宝的SDK和文档:
# Demo源码
源码下载 下载