个人认为最佳的学习方式是抛开内容繁重的文档,先去https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 下载个php的demo 边阅读源码变看文档 这种方式我觉得最有效 顺便吐槽下Java居然只有刷卡支付的栗子。。。
这篇博文不会很详细的介绍demo的源码 其实我们有时候业务并不需要使用微信支付的全部功能
还有例如Wxpay.Data.php这个文件 这个文件接近3000行
其实就是维护一个内部数组
protected $values = array();
同设置get set为这个数组设置参数,例如签名等等 大约有几十个参数
最后将这个数组转为xml等等给微信服务器做交互等等 如果要全部说清楚 那么你和看微信文档没什么区别 反而难上手
如果你用的是php 那么你把这个demo作为sdk我觉得是最快的方法,然后再阅读下本博文,基本就可以做出微信支付
如果你用的是java等语言 那么阅读完本博文之后还需继续啃下各个签名算法,然后再啃啃文档。所以一定程度上说,php是最好的语言,也不无道理哈哈(不喜勿喷),可能因为实现的不方便,微信才没有给出jsapi的Java实现版吧
1,设置基本的参数 在Wxpay.Config.php里可以看到
如果你没有认证的可以微信支付的公众号 不要紧 可以使用demo自带的四个参数 支付的钱是转到微信测试账号里 金额设置为0.01即可 土豪随意
有四个参数要设置 这里就不说了
//=======【基本信息设置】=====================================
//
/**
* TODO: 修改这里配置为您自己申请的商户信息
* 微信公众号信息配置
*
* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
*
* MCHID:商户号(必须配置,开户邮件中可查看)
*
* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
*
* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
* 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
* @var string
*/
2,认证并获取获取用户openid
通过向微信公众平台认证 获取一个code 通过这个code来换取用户的openid
openid其实就是微信用户在你的公众号上的唯一标识
demo的源码如下
首先检测你当前(也就是你要执行支付的页面)有没有收到get参数
如果有的话 就通过code调用获取openid的方法
public function GetOpenid()
{
//通过code获得openid
if (!isset($_GET['code'])){
//触发微信返回code码
$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header("Location: $url");
exit();
} else {
//获取code码,以获取openid
$code = $_GET['code'];
$openid = $this->getOpenidFromMp($code);
return $openid;
}
}
如果没有get到code的话 将当前(或者你要执行支付页面的其他url)拼接成一个baseurl
调用__CreateOauthUrlForCode方法 并跳转到生成出来的url
我们来看看生成认证url的方法
private function __CreateOauthUrlForCode($redirectUrl)
{
$urlObj["appid"] = WxPayConfig::APPID;
$urlObj["redirect_uri"] = "$redirectUrl";
$urlObj["response_type"] = "code";
$urlObj["