首页 > 我的文章 > PHP开发 > 支付问题 > OmiPay Web API 接入说明

OmiPay Web API 接入说明

浏览:945 编辑:绿萝 来源:绿萝
OmiPay Web API 接入说明

生成JSAPI订单

接口说明:JSAPI 订单可跨平台使用。商户调用该 API,返回支付 Url,商户引导客户跳转至该 Url 完成支付;或将支付 Url 生成二维码提供客户扫描,该二维码可用支付宝或微信 客户端扫描打开。接口地址https://www.omipay.com.cn/omipay/api/v2/MakeJSAPIOrder请求参数
字段名 变量名 类型 示例值 描述
订单名称 order_name String 测试商品 简单描述交易的商品或交易信息
货币 currency String AUD 下单货币类型
金额 amount int 100 金额,单位为下单货币的 最 小 货 币 值 。 例 如 currency=AUD, 则 100 表 示 A$1.00。
通知地址 notify_url String 交易成功通知地址
跳转地址 redirect_url String 交易成功跳转地址
订单编号 out_order_no String 外部订单编号,请确保唯 一性
是 否 直 接支付 direct_pay Int 1 若需要直接支付,则该项填 1
是否显示订单展示页 show_pc_pay_url Int 1 若需要返回订单展示页,则该项填1
门店编号 o_number String 1 (非必传)指定下单门店编号
POS机编号 pos_no String (非必传)指定下单的POS机编号
成功返回结果
字段名 变量名 类型 示例值 描述
状态码 return_code String SUCCESS 成功时返回 SUCCESS
订单编号 order_no String 32 位 OmiPay 订单编号
跳转 url pay_url String 支付跳转 Url,商户引 导客户跳转至该 Url, 完成支付
失败返回结果
字段名 变量名 类型 示例值 描述
状态码 return_code String FAIL 失败时返回 FAIL
错误码 error_code String SYSTEM_ERROR 错误的编码
错误信息 error_msg String 服务器错误 错误的描述
错误码列表
错误码 说明
WEBSTORE_NOT_EXISTS 该商户没有注册网店。商户没有在OmiPay登记注册网店会发生该错误。
AMOUNT_INVALID 金额不正确。当金额大于支付平台允许最大单笔交易金 额,或汇率转换后的金额小于支付平台付款最小金额 时,会提示该错误。
CURRENCY_ERROR 货币类型错误,可能是该两种货币类型的汇率无法获取,或是货币类型输入错误。
OUT_TRANSACTION_PAID 外部订单号已支付。
TRANSACTION_TIMEOUT 订单已超时。
POS_NOT_REGISTERED 商户 POS 端未注册。
POS_NOT_BIND Pos机未绑定门店。
请求举例http://www.omipay.com.au/omipay/api/v2/MakeJSAPIOrder? m_number=123456&timestamp=1482812036067&nonce_str=313644f42ecd4758b5e23 b80e86efdc4&sign=8516A3B52F9C8897F52239B19CD8A499&order_name= 测 试 商 品 &currency=AUD&amount=100&redirect_url=http://your_site.com/redirect_to. html&amount=100&notify_url=http://your_site.com/receive_notify.html&out _order_no=SEORD000001额外说明:JSAPI 需要设置 redirect_url,客户在完成支付后,浏览器会跳转至 redirect_url 中订单展示页说明:1)若调用接口时,传递了show_pc_pay_url=1参数,则接口返回值中会包含PC端的JSAPI订单展示页URL,属性名为pc_pay_url。2)商户可引导商城页面跳转至该URL,该页会展示订单信息和支付二维码,客户通过手机扫描页面上的二维码即可完成支付。支付完成后,浏览器会自动跳转到调用时传递的跳转地址。3)页面跳转至该URL时需要传递以下参数,参数传递方式和调用其他API的方式一致(将参数拼接到URL中)。
字段名 变量名 类型 示例值 描述
商户号 m_number String
时间戳 timestamp String 1482812036067
随机字符串 nonce_str String
签名 sign String
跳转地址 redirect_url String 交易成功后,PC端浏览器跳转地址。该地址可和调用MakeJSAPIOrder时传递的地址不同。

流程图

请求示例

String m_number = "商户编号";

String secret_key = "商户密钥";

String order_name = "测试商品";

String currency = "AUD";

String amount = "100";

String redirect_url = "http://your_site.com/redirect_to.html";

String notify_url = "http://your_site.com/receive_notify.html";

String out_order_no = "SEORD000001";

String timeStamp = String.valueOf(System.currentTimeMillis());

JSAPIOrder jsAPIOrder = new JSAPIOrder();

JSONObject result = jsAPIOrder.MakeJSAPIOrder(m_number,secret_key,timeStamp,order_name,currency,amount, notify_url,redirect_url,out_order_no);

System.out.println(result);

CopyDownload
String m_number = "商户编号"; String secret_key = "商户密钥"; String order_name = "测试商品"; String currency = "AUD"; String amount = "100"; String redirect_url = "http://your_site.com/redirect_to.html"; String notify_url = "http://your_site.com/receive_notify.html"; String out_order_no = "SEORD000001"; String timeStamp = String.valueOf(System.currentTimeMillis()); JSAPIOrder jsAPIOrder = new JSAPIOrder(); JSONObject result = jsAPIOrder.MakeJSAPIOrder(m_number, secret_key, timeStamp, order_name, currency, amount, notify_url, redirect_url, out_order_no); System.out.println(result);

require_once "../lib/OmiPayApi.php";

$input = new MakeJSAPIOrderQueryData();

$domain = 'AU';

// 设置'CN'为访问国内的节点 ,设置为'AU'为访问香港的节点

$time_no = OmiData::getMillisecondPublic();// 获取毫秒的时间戳

$out_order = OmiData::getNonceStrPublic(8);// 获得8位随机字符串, 时间戳+8位随机字符可生成外部订单号

$input -> setMerchantNo('商户编号');

$input -> setSercretKey('商户密钥');

$input -> setNotifyUrl("这里是设置回调通知地址");

$input -> setCurrency("AUD");// 这里是设置币种

$input -> setOrderName("Test_Goods");// 这里是设置商品名称

$input -> setAmount('1');// 这里是设置支付金额

$input -> setOutOrderNo($time_no.$out_order);// 这里是设置外部订单编号,请确保唯一性

$input -> setRedirectUrl("http://192.168.1.110/demo/omipay.api.sdk/");//设置支付完成之后的跳转地址

$result = OmiPayApi::jsApiOrder($input,$domain);

var_dump($result['pay_url']);

//处理获得数据

CopyDownload
require_once "../lib/OmiPayApi.php"; $input = new MakeJSAPIOrderQueryData(); $domain = 'AU'; // 设置'CN'为访问国内的节点 ,设置为'AU'为访问香港的节点 $time_no = OmiData::getMillisecondPublic(); $out_order = OmiData::getNonceStrPublic(8);// 获得8位随机字符串, 时间戳+8位随机字符可生成外部订单号 $input->setMerchantNo('商户编号'); $input->setSercretKey('商户密钥'); $input->setNotifyUrl("http://www.omipay.com.au:8000/demo/v2/example/notify.php");// 这里是设置回调通知地址 $input->setCurrency("AUD");// 这里是设置币种 $input->setOrderName("Test_Goods"); // 这里是设置商户名称 $input->setAmount('1');// 这里是设置支付金额 $input->setOutOrderNo($time_no.$out_order); // 这里是设置外部订单编号,请确保唯一性 $input->setRedirectUrl("http://192.168.1.110/demo/omipay.api.sdk/");//设置支付完成之后的跳转地址 $result = OmiPayApi::jsApiOrder($input,$domain); var_dump($result['pay_url']);

调用:

var client = new ApiClient(m_number, secret_key, 门店编号, 2, Models.EnumApiNode.CN);

//m_number 商户编号,secret_key 设置商户密钥, 2 API 版本号, Models.EnumApiNode.CN 节点AU/CN;

var response = client.MakeJSAPIOrder(orderName, amount, out_order_no, directPay, notify_url, redirect_url);

//orderName 订单名称,amount 金额, out_order_no 外部订单编号,notify_url 交易通知地址,AUD 货币类型,platform 支付平台;

return Json(response);



访问:

var timeStamp = Utilities.DateTimeToUnixTimestamp(DateTime.UtcNow);

//timeStamp 获取时间戳;

var nonceString = Utilities.GetGUID();

//nonceString 获取随机字符串;

var = Utilities.MakeSign(m_number, secret_key, timeStamp, nonceString);

//m_number 商户编号, secret_key 商户密钥, timeStamp 时间戳, nonceString 随机字符串;

var = $@"{payUrl}&redirect_url={ HttpContext.Server.UrlEncode(Configs.RedirectUrl)}&m_number={Configs.MerchantNo}&timestamp={timeStamp}&nonce_str={nonceString}&sign={sign}"

return url;

//处理获取的数据

CopyDownload
//调用: var client = new ApiClient(m_number, secret_key, 门店编号, 2, Models.EnumApiNode.CN); //m_number 商户编号,secret_key 设置商户密钥, 2 API 版本号, Models.EnumApiNode.CN 节点AU/CN; var response = client.MakeJSAPIOrder(orderName, amount, out_order_no, directPay, notify_url, redirect_url); //orderName 订单名称,amount 金额, out_order_no 外部订单编号,notify_url 交易通知地址,AUD 货币类型,platform 支付平台; return Json(response); //访问: var timeStamp = Utilities.DateTimeToUnixTimestamp(DateTime.UtcNow); //timeStamp 获取时间戳; var nonceString = Utilities.GetGUID(); //nonceString 获取随机字符串; var = Utilities.MakeSign(m_number, secret_key, timeStamp, nonceString); //m_number 商户编号, secret_key 商户密钥, timeStamp 时间戳, nonceString 随机字符串; var = $@"{payUrl}&redirect_url={ HttpContext.Server.UrlEncode(Configs.RedirectUrl)}&m_number={Configs.MerchantNo}×tamp={timeStamp}&nonce_str={nonceString}&sign={sign}" return url; //处理获取的数据

响应示例

  • 成功
  • 失败
  • null

成功返回数据举例

{

"return_code": "SUCCESS",

"pay_url" : "………………"

}

失败返回数据举例

{

"return_code": "FAIL",

"rate": "SIGN_TIMEOUT",

"error_msg": "时间戳超时"

}