微信支付SDK整合:PHP实现APP支付步骤解析

2 下载量 49 浏览量 更新于2024-08-30 收藏 58KB PDF 举报
"php微信支付之APP支付方法,微信开放平台移动应用集成,微信支付功能,WechatAppPay类,预支付订单,access_token管理" 在微信支付中,PHP被广泛用于后端处理,以实现与微信支付接口的交互。本文以一个名为`WechatAppPay`的类为例,讲解了如何在PHP环境中集成微信的APP支付功能。这个类继承自`WechatPayBase`,并提供了处理APP支付所需的各种方法。 1. **配置参数**: - `$package`:此属性用于存储`package`参数,它是APP支付的一个关键组成部分。 - `$notify`:表示异步通知参数,用于接收微信支付服务器发送的支付结果通知。 - `$config`:包含了推送预支付订单所需的配置信息,如appid、appsecret等。 2. **文件管理**: - `$file`:定义了一个文件路径,用于存储和读取`access_token`,确保在多次请求中可以复用有效的access_token。 - `__construct()`:构造函数初始化`file`属性,指定了access_token的存储位置。 3. **接口URL**: - `ACCESS_TOKEN_URL`:这是获取access_token的URL,采用OAuth2.0客户端凭证授权方式。 - `POST_ORDER_URL`:生成预支付订单的API地址,需要通过access_token访问。 4. **方法实现**: - `createAppPayData()`:这个方法是创建APP支付最终返回的参数,它包括了必要的支付字段,如`appid`、`appkey`、`noncestr`、`package`、`partnerid`、`prepayid`和`timestamp`。其中,`noncestr`是随机字符串,用于防止重放攻击;`package`的值固定为`Sign=WXPay`;`prepayid`是调用预支付接口得到的预支付交易会话标识。 5. **预支付订单**: - `getPrepayid()`:这个方法用于生成预支付订单ID,它通常涉及到调用微信支付的统一下单接口,需要传入商品信息、金额等。 6. **access_token管理**: - `ACCESS_TOKEN_URL`和`POST_ORDER_URL`的使用表明,access_token的获取和使用是整个支付流程中的重要环节。开发者需要维护好access_token的有效性,因为微信支付的大部分接口调用都需要这个令牌。 通过理解以上内容,开发者可以实现一个基本的PHP微信APP支付流程,包括获取access_token、生成预支付订单、构建支付请求数据,并将这些数据传递给前端进行支付展示。在实际开发中,还需要处理各种异常情况,如网络错误、支付失败等,并实现完整的回调处理逻辑,确保交易的安全性和完整性。
2018-09-03 上传
2018-09-03 php服务端微信支付整理SDK,封装,如果喜欢请给个好评!谢谢 说明: 配置在 WeChatConfig文件下 环境:php5.6,基于tp5开发 调用统一下单接口: include_once EXTEND_PATH . 'WeChatSDK/WeChatSDK.php'; $data = $this->getOrderInfo($pay_sn); if (!$data) { return $this->resultCode(-2019, '订单不存在或已支付'); } $WeixinPay = new \WeChatSDK(); if ($trade_type == 'JSAPI') { //目前未有此功能 $openid = ''; $product_id = ''; } if ($trade_type == 'NATIVE') { $openid = ''; $product_id = $pay_sn; } if ($trade_type == 'MWEB') { $openid = ''; $product_id = $pay_sn; } if ($trade_type == 'APP') { $openid = ''; $product_id = $pay_sn; } $out_trade_no = $pay_sn; $result = $WeixinPay->setWeiXinPay($data['pay_body'], $data['pay_detail'], $data['pay_money'] * 100, $out_trade_no, $red_url, $trade_type, $openid, $product_id); APP加密:$WeChatSDK->GetAppParameters($result['data']); web编码 $WeChatSDK->GetMwebApiParameters(); jsapi:WeChatSDK-> GetJsApiParameters(); 回调调用: include_once EXTEND_PATH . 'WeChatSDK/WeChatSDK.php'; Log::write("gwgwgwgw---------------------------------进入异步回掉"); $postStr = file_get_contents('php://input'); Log::write("gwgwgwgw---------------------------------" . $postStr); $WeChatSDK = new \WeChatSDK(); if (!empty($postStr)) { $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $check_sign = $WeChatSDK->checkSign($postObj, $postObj->sign); Log::write('-----check_sign-------' . $check_sign . '------------check_sign--------------'); if ($postObj->result_code == 'SUCCESS' && $check_sign == 1) { model('order', 'service')->affirmPayment($postObj->out_trade_no); $xml = "<xml> <![CDATA[SUCCESS]]></return_co