Coolfensi推广网站头像

Coolfensi推广网站

Coolfensi推广网站专注数据驱动的互联网营销和运营,客服VX:coolfensi,客服QQ:2451468936(QQ/微信客服只做引导和站点通知,不闲聊。有站点内业务疑问以及订单问题的话,请点击【CL-在线售后客服窗口】进行会话)

  • 文章113603
  • 阅读15392495

人生倒计时

  • 今日已经过去小时
  • 这周已经过去
  • 本月已经过去
  • 今年已经过去个月
首页 最新知识 正文内容

支付接口代码(支付接口制作)

客服VX(coolfensi) 最新知识 2023-02-21 09:02:13 92

交通银行支付接口提示代码: EBLN0183 提示信息:验证签名数据失败:原文与签名不符

验证签名数据失败:原文与签名不符原因:

联系方式:微信:coolfensi
(使用浏览器扫码进入在线客服窗口)
复制联系方式

支付接口中有ip字段,有些铁通、长宽网络有时会替换通讯内容中文本内容为ip的字段,导致数据被篡改,导致验证签名报错。

解决方案:

商户组支付请求参数(GET或POST参数)时,把spbill_create_ip字段的点号替换为%2E, 但签名时ip字段依然需要用点号。

最近的样例tenpay_api_b2c.zip已经包含解决方案,商户可以下载参考修改方法。

在RequestHandler类查找关键字spbill_create_ip,能看到相关代码。

支付接口代码(支付接口制作) 第1张

使用支付宝接口出现: 调试错误,请回到请求来源地,重新发起请求。 错误代码 HAS_NO_PRIVILEGE

错误代码 HAS_NO_PRIVILEGE的含义是没有权限访问该服务 。

出现上述错误代码的原因有以下三种情况:

1、没有签约这个接口的合同。

2、签约了相应的接口合同,但没有生效。

3、签约了相应的接口合同,但由于违规违法等原因被审核部门强制关闭。

出现上述错误代码时,建议检查合同,确认合同是否签约,确认合同是否生效,确认所有操作符合法规。

扩展资料:

使用支付宝接口需要遵循以下规则:

1、合作申请前必须拥有经过实名认证的支付宝账户;

2、遵守国家法律法规规定,经营内容合法合规;

3、遵循与支付宝相关协议(合同)约定;

4、遵循网络诚信交易原则,守法诚信经营。

支付宝开放平台服务商准入规则:

1、必须持有经过实名认证的支付宝账户;

2、具备收银系统技术开发能力、支付宝API调用能力、商户管理系统开发能力、商户拓展及运营等能力;

3、遵守国家法律法规规定,遵循与支付宝相关协议(合同)约定;

4、企业无工商异常信息、无失信记录、无法院未执行信息。

工行支付接口总是提示 : 信息代码:96113424 提示信息:订单数据有误 跪求原因!!!

工行支付接口提示 “信息代码:96113424 提示信息:订单数据有误 ”这属于工行那边验证服务的问题。解决方法:

可以先将钱充值到支付宝,再利用支付宝给手机充值。打开支付宝的官方网站;

在页面右上角,点击“登录”链接。如果没有支付宝帐号,可以点击“注册”链接先注册;

登陆后,在打开的页面中点击充值;

在打开的页面中,在网上银行一栏中选择中国工商银行,然后点击下一步;

在打开的页面中,输入金额,然后点击下一步。注意不用勾选《同意快捷支付服务及相关协议》,如果勾选了,将使用快捷支付;

接下来,就跳到工行的网银支付页面了。按照以往的方式支付成功后,支付宝里就有钱了;

然后,我们可以重新打开中国联通或中国移动的网上营业厅交话费。在支付页面中,选择支付宝付款就行了。

1、中国工商银行,全称中国工商银行股份有限公司(ICBC),简称工行(港交所代码1398;上交所代码601398),成立于1984年1月1日,总部在北京。

2、该行是在中国人民银行专门行使中央银行职能的同时,从中国人民银行分离出来的专业银行,另外还是香港中资金融股的七行五保(前称六行三保)之一。中国工商银行是中央四大行之一,全球市值最大的银行,世界五百强企业之一。

3、2013年4月18日,《福布斯》2013全球企业2000强榜单出炉,中国工商银行成为全球最大企业。2014年2月14日,世界百强银行名单出炉,中国工商银行名列榜首,其资产数额达3.062万亿美元。2014年7月7日,工行以427亿美元利润,排世界500强公司第25位。

支付宝的接口代码

首先,支付接口分成两个部分,一个是支付功能部分,一个是订单信息同步部分。

你先完成即时到帐的接口实现支付功能部分实现10元钱打入你的账号上,接口代码中有两个页面文件一个是return_url一个是notify_url,充值进100虚拟币这其实就是对你的数据库的会员数据表的虚

拟币的字段进行修改增加100,因此你根据这两个页面中的注释部分填写相应的数据库更新语句程序即可完成。

请参考: 支付宝的官方技术开发者社区论坛 经验分享区 里的 解读支付宝接口程序 第四楼 四、通知返回

接入支付宝支付SDK

接入支付宝支付SDK

可以说支付宝支付接入是所有SDK最好接入的,没有之一。

客户端不用签名,也不用管包名,也不用管签名文件,就接口返回订单,把订单交给支付宝SDK调用就行,成功或者失败都在当前界面返回给你。你再去通知接口。

支付流程图

官方文档地址

!支付宝支付官方文档地址

按照文档说明接入SDK和相关配置,在这就不重复了

客户端支付关键代码===》支付接口的调用(调起支付弹框)

记住支付接口的调用必须在独立的非ui线程中执行,即需新开线程里面调用。可以想官方demo一样用new Thread方式。

下面我给出用Observable方式示例代码

在PayUtils中

/**

* desc:支付宝支付

* Created by congge on 2018/8/27 17:20

* @param orderInfo 接口返回的订单

**/

public static void aliPay(final Activity activity, final String orderInfo, final OrderListener orderListener) {

Observable.just(orderInfo)

.map(new Function () {

@Override

public String apply(String orderInfo) throws Exception {

//用户在商户app内部点击付款,是否需要一个loading做为在钱包唤起之前的过渡,这个值设置为true

return new PayTask(activity).pay(orderInfo, true);

}

})

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Consumer () {

@Override

public void accept(String payResult) throws Exception {

orderListener.onPayResult(payResult);

}

});

}

支付结果返回处理

返回例子:

resultStatus={9000};memo={};result={{"alipay_trade_app_pay_response":{"code":"10000","msg":"Success","app_id":"2016091300503896","auth_app_id":"2016091300503896","charset":"utf-8","timestamp":"2018-08-28 17:51:11","out_trade_no":"nVElbd74TW6WnEyxQwvX8A","total_amount":"0.01","trade_no":"2018082821001004680500208879","seller_id":"2088102175487650"},"sign":"W0Hg9k4GxL8Oaxymvqk2i65WNDQxYp6HGve32ek6VjSRnymmI3GQTjpQVbZuDzvjcwQ/HIkM97PoBGAVlTmi/wiJcqDgSSDzDY7AFnNN0OcK0ehWGwKQINA4IDGh51A7yY/vYKmR0VW+2OwGhlRPPMMZtQOEqh8a9/aIijzT6ZLwy9Hl4ayG/fVKhdC1VdckF6+C25BFNp3fIxarg5tfEunm7N9iWngKCUsnP+IZz05OHdvynimgYPcBnbBERHG97GVqRT/EdBWTQyIDMc0LemScAYxJixTVgXDkRddQjzWZ7HgLdBfjs0nXY24puHudT76ERxVY+8NkoKle/QI+FA==","sign_type":"RSA2"}}

也可以自己打log看看

处理示例代码:

//支付宝支付

PayUtils.aliPay(this, result.getSignDataStr(), new PayUtils.OrderListener() {

@Override

public void onPayResult(String payResult) {

PayResult pr = new PayResult(payResult);

String rs = pr.getResultStatus();

String r = pr.getResult();

switch (rs) {

case AliPayResultStatus.PAY_SUCCESS:

ToastUtils.show(R.string.pay_success);

//通知接口支付成功

break;

case AliPayResultStatus.PAY_PROCESSING:

case AliPayResultStatus.PAY_UNKNOWN:

ToastUtils.show(R.string.pay_fail);

//支付可能成功,要接口去查询

break;

default:

ToastUtils.show(R.string.pay_fail);

//通知接口支付失败,取消订单

}

}

});

上面方法中:

//通知接口支付成功 //支付可能成功,要接口去查询 //通知接口支付失败,取消订单。根据你产品需求要不要通知你服务器做的操作。正常是要的,用来改变订单状态

PayResult.class

public class PayResult {

private String resultStatus;

private String result;

private String memo;

public PayResult(String rawResult) {

if (TextUtils.isEmpty(rawResult))

return;

String[] resultParams = rawResult.split(";");

for (String resultParam : resultParams) {

if (resultParam.startsWith("resultStatus")) {

resultStatus = gatValue(resultParam, "resultStatus");

}

if (resultParam.startsWith("result")) {

result = gatValue(resultParam, "result");

}

if (resultParam.startsWith("memo")) {

memo = gatValue(resultParam, "memo");

}

}

}

@Override

public String toString() {

return "resultStatus={" + resultStatus + "};memo={" + memo

+ "};result={" + result + "}";

}

private String gatValue(String content, String key) {

String prefix = key + "={";

return content.substring(content.indexOf(prefix) + prefix.length(),

content.lastIndexOf("}"));

}

public String outOrder() {

String order = ""out_trade_no"";

if (result.contains(order)) {

String begin = result.substring(result.indexOf(order));

String ss = begin.split(",")[0];

String newS = ss.replace(""", "")

.replace("}", "")

.replace(":", "")

.replace("out_trade_no", "");

try {

return newS;

} catch (Exception e) {

e.printStackTrace();

}

}

return "";

}

/**

* @return the resultStatus

*/

public String getResultStatus() {

return resultStatus;

}

/**

* @return the memo

*/

public String getMemo() {

return memo;

}

/**

* @return the result

*/

public String getResult() {

return result;

}}

最后给下支付返回码表

AliPayResultStatus.class

public class AliPayResultStatus {

/**

* 订单支付成功,唯一肯定是支付成功的

*/

public static final String PAY_SUCCESS = "9000";

/**

* 正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态

*/

public static final String PAY_PROCESSING = "8000";

/**

* 订单支付失败

*/

public static final String PAY_FAIL = "4000";

/**

* 重复请求

*/

public static final String PAY_REPEAT = "5000";

/**

* 用户中途取消

*/

public static final String PAY_PROCESS_CANCEL = "6001";

/**

* 网络连接出错

*/

public static final String PAY_NET_ERROR = "6002";

/**

* 支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态

*/

public static final String PAY_UNKNOWN = "6004";}

还有一个直接弃用沙箱调试模式,否则提示支付失败也有可能不知道错在那,怕金额大,和接口商量,测试服务器就用0.01测试。

文章目录
    搜索