微信公众平台开发微信支付
一、JS-SDK
公众号中的微信支付需要通过JS来实现。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。
1)引入JS脚本文件
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
2)通过config接口注入权限验证配置
<script> wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 }); </script>
appId就是应用ID,wx打头的那串字符,timestamp在php中就用time()获取,而nonceStr就用uniqid()获取,而signature根据特定算法获取。
protected function getJsapiConfig() { $weixin = new Weixin(); $ticketMongo = new WeixinJsapiTicket(); $data = [ 'appId' => $weixin->getAppId(), 'noncestr' => uniqid(), 'jsapi_ticket' => $ticketMongo->getJsapiTicket(), 'timestamp' => time() ]; //拼装原始待签名串 $src = [ 'noncestr=' . $data['noncestr'], 'jsapi_ticket=' . $data['jsapi_ticket'], 'timestamp=' . $data['timestamp'] ]; sort($src); $data['signature'] = sha1(implode('&', $src)); return $data; }
这里说明下“jsapi_ticket”,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于有时间限制,而且获取jsapi_ticket的api调用次数非常有限,所以我会将获取到的jsapi_ticket保存到MongoDB中。
/** * 通过access_token获取jsapi_ticket * @param $access_token * @return string | null */ public function getJsapiTicket($access_token) { $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket'; $param = [ 'access_token' => $access_token, 'type' => 'jsapi' ]; $res = $this->request($url, $param); $result = json_decode($res, true); if (isset($result['errcode']) && $result['errcode'] == 0 && isset($result['ticket'])) { return $result; } return null; }
3)通过ready接口处理成功验证
1)prepay_id是根据本地生成的订单号等获取的,订单号每次请求的得不一样,不然会报错的
2)nonceStr就用md5(uniqid('baiaimama'))获取
3)signType使用MD5
4)paySign根据代码的参数,排序后拼接获得。
wx.chooseWXPay({ timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: '', // 支付签名随机串,不长于 32 位 package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: '', // 支付签名 success: function (res) { // 支付成功后的回调函数 } });
/** * 生成jsapi需要调用的参数 */ public function getJsapiParam(){ $param = [ 'appId' => $this->APPID, 'timeStamp' => time(), 'nonceStr' => md5(uniqid('baiaimama')), 'package' => 'prepay_id='.$this->param['prepay_id'], 'signType' => 'MD5' ]; $str = []; foreach($param as $k=>$v){ if(!empty($v)){ $str[] = "{$k}={$v}"; } } sort($str); $unsignKey = join('&', $str).'&key='.$this->KEY; $sign = strtoupper(md5($unsignKey)); $param['paySign'] = $sign; return $param; }
二、异步回调
异步回调中做些修改订单状态、发送短信,推送消息等操作。
/** * 微信支付异步回调API * 微信支付成功,会收到异步回调 */ public function actionWxpay() { $weixinPay = new WeixinPay(); $weixin = new Weixin(); $xml = file_get_contents('php://input'); $msg = $weixin->parseMsg($xml); //记录微信推送日志 $notifyMongo = new WeixinPayNotify(); $notifyMongo->logPayNotify($xml); if(!$msg || !is_object($msg)){ $weixinPay->notifyXml('FAIL', '通知不合法'); } if(!isset($msg->return_code) || $msg->return_code != 'SUCCESS'){ $weixinPay->notifyXml('FAIL', '通信失败'); } if(!isset($msg->result_code) || $msg->result_code != "SUCCESS"){ $weixinPay->notifyXml('FAIL', '交易失败'); } //签名验证失败 if(!$weixinPay->checkSign($msg)){ $weixinPay->notifyXml('FAIL', '签名验证失败'); } //$notifyMongo->add($msg); //流程走到这里说明已经支付成功了,这里无需更新订单逻辑 $userOrder = new UserOrder(); //记录微信订单号 $userOrder->pay($msg->out_trade_no, $msg->transaction_id); }
demo下载:
github地址:https://github.com/pwstrick/weixin_demo
CSDN地址:http://download.csdn.net/detail/loneleaf1/9045731
更多微信公众平台开发微信支付 相关文章请关注PHP中文网!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP是一种开源的脚本语言,广泛应用于Web开发和服务器端编程,尤其在微信开发中得到了广泛的应用。如今,越来越多的企业和开发者开始使用PHP进行微信开发,因为它成为了一款真正的易学易用的开发语言。在微信开发中,消息的加密和解密是一个非常重要的问题,因为它们涉及到数据的安全性。对于没有加密和解密方式的消息,黑客可以轻松获取到其中的数据,对用户造成威胁

随着微信的普及,越来越多的企业开始将其作为营销工具。而微信群发功能,则是企业进行微信营销的重要手段之一。但是,如果只依靠手动发送,对于营销人员来说是一件极为费时费力的工作。所以,开发一款微信群发工具就显得尤为重要。本文将介绍如何使用PHP开发微信群发工具。一、准备工作开发微信群发工具,我们需要掌握以下几个技术点:PHP基础知识微信公众平台开发开发工具:Sub

在微信公众号开发中,用户标签管理是一个非常重要的功能,可以让开发者更好地了解和管理自己的用户。本篇文章将介绍如何使用PHP实现微信用户标签管理功能。一、获取微信用户openid在使用微信用户标签管理功能之前,我们首先需要获取用户的openid。在微信公众号开发中,通过用户授权的方式获取openid是比较常见的做法。在用户授权完成后,我们可以通过以下代码获取用

随着微信成为了人们生活中越来越重要的一个通讯工具,其敏捷的消息传递功能迅速受到广大企业和个人的青睐。对于企业而言,将微信发展为一个营销平台已经成为趋势,而微信开发的重要性也逐渐凸显。在其中,群发功能更是被广泛使用,那么,作为PHP程序员,如何实现群发消息发送记录呢?下面将为大家简单介绍一下。1.了解微信公众号相关开发知识在了解如何实现群发消息发送记录之前,我

微信是目前全球用户规模最大的社交平台之一,随着移动互联网的普及,越来越多的企业开始意识到微信营销的重要性。在进行微信营销时,客服服务是至关重要的一环。为了更好地管理客服聊天窗口,我们可以借助PHP语言进行微信开发。一、PHP微信开发简介PHP是一种开源的服务器端脚本语言,广泛运用于Web开发领域。结合微信公众平台提供的开发接口,我们可以使用PHP语言进行微信

在微信公众号开发中,投票功能经常被运用。投票功能是让用户快速参与互动的好方式,也是举办活动和调查意见的重要工具。本文将为您介绍如何使用PHP实现微信投票功能。获取微信公众号授权首先,你需要获取微信公众号的授权。在微信公众平台上,你需要配置微信公众号的api地址、官方账号和公众号对应的token。在我们使用PHP语言开发的过程中,我们需要使用微信官方提供的PH

随着互联网和移动智能设备的发展,微信成为了社交和营销领域不可或缺的一部分。在这个越来越数字化的时代,如何使用PHP进行微信开发已经成为了很多开发者的关注点。本文主要介绍如何使用PHP进行微信开发的相关知识点,以及其中的一些技巧和注意事项。一、开发环境准备在进行微信开发之前,首先需要准备好相应的开发环境。具体来说,需要安装PHP的运行环境,以及微信公众平台提

随着移动互联网的普及,微信作为一款社交软件,越来越多的人开始使用,并且微信开放平台也给开发者带来了众多的机会。近年来,随着人工智能技术的发展,语音识别技术逐渐成为了移动端开发的热门技术之一。在微信开发中,如何实现语音识别成为很多开发者关注的问题。本文将介绍如何利用PHP开发微信应用实现语音识别功能。一、语音识别原理在介绍如何实现语音识别之前,我们先了解一下语
