微信api支付
2016-09-26 10:05
148 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
微信支付的方式有很多种,
JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里
MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口
这里以 NATIVE 原声扫码支付为例进行介绍。
官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
2.按官方文档组织参数,生成URL
3.CURL等访问URL,获取XML返回值,成功则获得code_url,二维码的URL参数
4.根据code_url生成二维码,展示在用户前台,用户微信扫描后完成支付
5.自己系统的回调验证,完成支付交易
一.配置参数
code_url是同步返回的结果,商户系统先调用该接口在微信支付服务后台生成预支付交易单
phpqrcode等相关代码下载见三。
通过返回的结果生成二维码,用户扫描支付后,走参数填写 notify_url 的回调地址
二.回调参数
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
<sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
</xml>
回调就不做多阐述了,区分好return_code与result_code,
前者是调用结果,后者是本次调用执行的结果,是有区别的。
根据不同的返回结果,对应操作自己的逻辑即可。
三.注意事项
1.【基本信息设置】
商户向微信提交企业以及银行账户资料,商户功能审核通过后,可以获得帐户基本信息,找到本例程的配置文件「WxPay.pub.config.php」,配置好如下信息:
appId:微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看。
Mchid:受理商ID,身份标识
Key:商户支付密钥Key。审核通过后,在微信发送的邮件中查看。
Appsecret:JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看。
2.【native支付链接设置】
native支付中,用户扫码后调微信会将productid和用户openid发送到商户设置的链接上,确保该链接与实际服务路径一致。本例程的响应服务为「./demo/native_call.php」
3.【JSAPI路径设置】
通过JSAPI发起支付的代码应该放置在商户设置的「支付授权目录」中。
并找到本例程的配置文件「WxPay.pub.config.php」,配置正确的路径。
4.【证书路径设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置证书路径。
5.【异步通知url设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置异步通知url。
6.【必须开启curl服务】
使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"即可。
7.【设置curl超时时间】
本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒。找到本例程的配置文件「WxPay.pub.config.php」,配置curl超时时间。
8. 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。
9. 该接口 不需要证书
10. 微信的接口里,所有对金额的描述,都是以分为单位的
四.相关集成文档下载
封装文档:
二维码合成代码下载 : http://download.csdn.net/detail/ty_hf/9632186
支付源码文档下载 : http://download.csdn.net/detail/ty_hf/9632200
都很简单,就是调接口而已,注意的就是安全性的一些问题
比如说,对返回的code_url二维码信息,在传递的过程中注意加解密等
原文地址:http://blog.csdn.net/ty_hf/article/details/52564574
目录(?)[+]
微信支付的方式有很多种,
JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里
MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口
这里以 NATIVE 原声扫码支付为例进行介绍。
官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
步骤:
1.开通支付权限,获取app_id等必须参数2.按官方文档组织参数,生成URL
3.CURL等访问URL,获取XML返回值,成功则获得code_url,二维码的URL参数
4.根据code_url生成二维码,展示在用户前台,用户微信扫描后完成支付
5.自己系统的回调验证,完成支付交易
一.配置参数
/** * 组装包含支付信息的url(模式2) */ public function get_payurl() { require_once BASE_PATH.'/api/payment/wxpay/lib/WxPay.Api.php'; require_once BASE_PATH.'/api/payment/wxpay/WxPay.NativePay.php'; require_once BASE_PATH.'/api/payment/wxpay/log.php'; $logHandler= new CLogFileHandler(BASE_DATA_PATH.'/log/wxpay/'.date('Y-m-d').'.log'); $Logwx = Logwx::Init($logHandler, 15); //统一下单 $input = new WxPayUnifiedOrder(); $input->SetBody($this->_order_info['pay_sn'].'订单'); // $input->SetBody(C('site_name').'订单'); $input->SetAttach($this->_order_info['order_type'] == 'vr_order' ? 'v' : 'r'); $input->SetOut_trade_no($this->_order_info['pay_sn']); $input->SetTotal_fee($this->_order_info['api_pay_amount']*100); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 3600)); $input->SetGoods_tag(''); $input->SetNotify_url(SHOP_SITE_URL.'/api/payment/wxpay/notify_url.php'); $input->SetTrade_type("NATIVE"); //$input->SetOpenid($openId); $input->SetProduct_id($this->_order_info['pay_sn']); $result = WxPayApi::unifiedOrder($input); // header("Content-type:text/html;charset=utf-8"); // print_R($result);exit; Logwx::DEBUG("unifiedorder-:" . json_encode($result)); return $result["code_url"]; }
code_url是同步返回的结果,商户系统先调用该接口在微信支付服务后台生成预支付交易单
/** * 二维码显示(微信扫码支付) */ public function qrcodeOp() { $data = base64_decode($code_url); require_once BASE_RESOURCE_PATH.'/phpqrcode/phpqrcode.php'; QRcode::png($data); }
phpqrcode等相关代码下载见三。
通过返回的结果生成二维码,用户扫描支付后,走参数填写 notify_url 的回调地址
二.回调参数
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
<sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
</xml>
回调就不做多阐述了,区分好return_code与result_code,
前者是调用结果,后者是本次调用执行的结果,是有区别的。
根据不同的返回结果,对应操作自己的逻辑即可。
三.注意事项
1.【基本信息设置】
商户向微信提交企业以及银行账户资料,商户功能审核通过后,可以获得帐户基本信息,找到本例程的配置文件「WxPay.pub.config.php」,配置好如下信息:
appId:微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看。
Mchid:受理商ID,身份标识
Key:商户支付密钥Key。审核通过后,在微信发送的邮件中查看。
Appsecret:JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看。
2.【native支付链接设置】
native支付中,用户扫码后调微信会将productid和用户openid发送到商户设置的链接上,确保该链接与实际服务路径一致。本例程的响应服务为「./demo/native_call.php」
3.【JSAPI路径设置】
通过JSAPI发起支付的代码应该放置在商户设置的「支付授权目录」中。
并找到本例程的配置文件「WxPay.pub.config.php」,配置正确的路径。
4.【证书路径设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置证书路径。
5.【异步通知url设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置异步通知url。
6.【必须开启curl服务】
使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"即可。
7.【设置curl超时时间】
本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒。找到本例程的配置文件「WxPay.pub.config.php」,配置curl超时时间。
8. 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。
9. 该接口 不需要证书
10. 微信的接口里,所有对金额的描述,都是以分为单位的
四.相关集成文档下载
封装文档:
二维码合成代码下载 : http://download.csdn.net/detail/ty_hf/9632186
支付源码文档下载 : http://download.csdn.net/detail/ty_hf/9632200
错误码
名称 | 描述 | 原因 | 解决方案 |
---|---|---|---|
NOAUTH | 商户无此接口权限 | 商户未开通此接口权限 | 请商户前往申请此接口权限 |
NOTENOUGH | 余额不足 | 用户帐号余额不足 | 用户帐号余额不足,请用户充值或更换支付卡后再支付 |
ORDERPAID | 商户订单已支付 | 商户订单已支付,无需重复操作 | 商户订单已支付,无需更多操作 |
ORDERCLOSED | 订单已关闭 | 当前订单已关闭,无法支付 | 当前订单已关闭,请重新下单 |
SYSTEMERROR | 系统错误 | 系统超时 | 系统异常,请用相同参数重新调用 |
APPID_NOT_EXIST | APPID不存在 | 参数中缺少APPID | 请检查APPID是否正确 |
MCHID_NOT_EXIST | MCHID不存在 | 参数中缺少MCHID | 请检查MCHID是否正确 |
APPID_MCHID_NOT_MATCH | appid和mch_id不匹配 | appid和mch_id不匹配 | 请确认appid和mch_id是否匹配 |
LACK_PARAMS | 缺少参数 | 缺少必要的请求参数 | 请检查参数是否齐全 |
OUT_TRADE_NO_USED | 商户订单号重复 | 同一笔交易不能多次提交 | 请核实商户订单号是否重复提交 |
SIGNERROR | 签名错误 | 参数签名结果不正确 | 请检查签名参数和方法是否都符合签名算法要求 |
XML_FORMAT_ERROR | XML格式错误 | XML格式错误 | 请检查XML参数格式是否正确 |
REQUIRE_POST_METHOD | 请使用post方法 | 未使用post传递参数 | 请检查请求参数是否通过post方法提交 |
POST_DATA_EMPTY | post数据为空 | post数据不能为空 | 请检查post数据是否为空 |
NOT_UTF8 | 编码格式错误 | 未使用指定编码格式 | 请使用NOT_UTF8编码格式 |
比如说,对返回的code_url二维码信息,在传递的过程中注意加解密等
原文地址:http://blog.csdn.net/ty_hf/article/details/52564574
相关文章推荐
- ReactNative接入微信API 接入支付宝支付
- C# 微信扫码支付API (微信扫码支付模式二)
- C#微信开发之旅(九):JSAPI支付(V3)
- .NET MVC结构框架下的微信扫码支付模式二 API接口开发测试
- 微信 JS API 支付教程
- 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求
- 【微信付款】企业支付个人api
- 微信 JS API 支付教程
- 微信沙箱退款查询接口demo实例,微信公众号支付退款查询api,微信沙盒1004用例-公众号/APP/扫码支付退款查询——微信支付沙箱开发11
- 支付宝微信免签约 免手续费 支付接口API
- 微信调jsapi 支付遇到的 坑坑
- PHP:微信小程序调用【统一下单】【微信支付】【支付回调】API;XML转Array,Array转XML方法(通用)
- 微信js api支付
- 通过lua脚本识别微信,支付宝,龙支付
- JAVA微信扫码支付模式二功能实现以及回调
- 微信H5网页分享API 调用
- 微信app支付返回-1错误的情况解决方法
- webview实现支付后的业务逻辑处理,小程序webview完成微信支付后的处理方法——微信web-view高级用法12
- 利用WordPress REST API 开发微信小程序从入门到放弃
- 微信小程序—tabBar底部导航中文注解api