微信native扫码支付
来源:互联网 发布:天猫优质男装品牌知乎 编辑:程序博客网 时间:2024/04/30 03:14
微信支付的方式有很多种,
1.JSAPI--公众号支付、
2.NATIVE--原生扫码支付、
3.APP--app支付,统一下单接口trade_type的传参可参考这里
4.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
错误码
都很简单,就是调接口而已,注意的就是安全性的一些问题
比如说,对返回的code_url二维码信息,在传递的过程中注意加解密等
- 微信native扫码支付
- 微信支付之扫码支付(java版 native原生支付)
- 微信支付-扫码支付备忘
- 微信支付扫码支付
- ThinkPHP整合微信支付之Native 扫码支付 模式二
- ThinkPHP整合微信支付之Native 扫码支付 模式一
- 微信支付Native扫码支付模式二之CodeIgniter集成篇
- 微信支付Native扫码支付模式二之CodeIgniter集成篇
- ThinkPHP整合微信支付之Native 扫码支付 模式一
- ThinkPHP整合微信支付之Native 扫码支付 模式二
- 第三方支付之微信支付(扫码支付)
- 关于微信PC扫码支付
- 微信开发之扫码支付
- 微信支付—— 扫码支付
- ASP微信支付之扫码支付
- 微信支付——扫码支付模式二
- 微信支付--扫码支付模式二实现
- 微信支付接入流程——扫码支付
- Unity客户端架构-UIContainer
- [Android]Activity启动过程
- 面向对象程序设计上机练习九(对象指针)
- 有刷、有感和无刷无感电机的使用心得
- 不依赖storyboard实现ViewController跳转和传参
- 微信native扫码支付
- 一、安卓预备知识
- 网站上传文件学习笔记
- 字符流中第一个不重复的字符
- [Android]使用RecyclerView替代ListView(一)
- NoSQL数据库
- codeforces C. Memory and De-Evolution
- HDU 5878 I Count Two Three 2016青岛网赛
- [Android]使用RecyclerView替代ListView(一)