# 商户App集成IOTPay

# 基本流程

在App集成场景下,有4个参与的系统:

1, 商家的App
2, 商家的后台系统
3, IOTPay的API服务
4, 微信支付/支付宝的服务

对于商户APP,商户发送支付请求到支付中心后,支付中心向商户返回加密数据且不向三方支付发送消息。商户利用接收到的加密数据调用三方支付的SDK,向三方支付发起支付请求。当支付中心收到三方支付 的支付消息后,支付中心通知商户支付结果。

An image

# 商家App调用商家后台API

该API由商家自行定义,可参考的基本例子如下:

服务地址: https://merchant_server/pay?channelid=XXX&amount=xxx

  • 请求方式: GET

商家后台收到App调用后,向IOTPay发起下单。

# App支付需指定ChannelId如下:

渠道ID 渠道名称
WX_APP 商户APP微信支付
ALIPAY_MOBILE 商户APP支付宝支付

# 商家后台调用统一下单接口

# 请求URL

服务地址: https://api.iotpaycloud.com/v1/create_order

请求方式:

  • POST
  • Content-Type: application/x-www-form-urlencoded

An image

# 参数说明

字段名 变量名 必填 类型 示例值 描述
商户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)

| 附加参数 | 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);

if($channelId =='WX_APP')
{
	echo $resBody;
}
else if ($channelId =='ALIPAY_MOBILE')
{
echo $res['payParams'];
}

# 返回错误

更多返回错误代码请看这里

# 微信/支付宝的SDK和文档:

# Demo源码

源码下载 下载

上次更新: 7/2/2020, 10:40:51 AM