微信Native支付官方文档有点小坑,摸索了半天,总结一下:
1.首先肯定是要开通微信支付功能
2.设置支付授权目录
3.设置js安全域名
4.然后就是代码了:
大概逻辑是这样的:首先是获取openid,然后整合微信统一下单api需要的参数,调用统一下单api,生成订单后整合支付需要的参数,然后给js接口即可.
5具体代码:
这里我没有使用官方给的支付demo,我在网上找了一个,然后自己改了一点。
JsApiPay.class.php 这个文件主要是获取openidde
<?php
//require_once "../lib/WxPay.Api.php";
namespace Lib;
/**
*
* JSAPI支付实现类
* 该类实现了从微信公众平台获取code、通过code获取openid和access_token、
* 生成jsapi支付js接口所需的参数、生成获取共享收货地址所需的参数
*
* 该类是微信支付提供的样例程序,商户可根据自己的需求修改,或者使用lib中的api自行开发
*
* @author widy
*
*/
class JsApiPay
{
/**
*
* 网页授权接口微信服务器返回的数据,返回样例如下
* {
* "access_token":"ACCESS_TOKEN",
* "expires_in":7200,
* "refresh_token":"REFRESH_TOKEN",
* "openid":"OPENID",
* "scope":"SCOPE",
* "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
* }
* 其中access_token可用于获取共享收货地址
* openid是微信支付jsapi支付接口必须的参数
* @var array
*/
public $data = null;
private $_APPID;
private $_CURL_PROXY_HOST = '0.0.0.0';
private $_CURL_PROXY_PORT = 0;
private $_APPSECRET;
public function __construct($config)
{
$this->_APPID = $config['appid'];
$this->_APPSECRET = $config['secret'];
if(isset($config['CURL_PROXY_HOST'])){
$this->_CURL_PROXY_HOST = $config['CURL_PROXY_HOST'];
}
if(isset($config['CURL_PROXY_PORT'])){
$this->_CURL_PROXY_PORT = $config['CURL_PROXY_PORT'];
}
}
/**
*
* 通过跳转获取用户的openid,跳转流程如下:
* 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
* 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
*
* @return 用户的openid
*/
public function GetOpenid()
{
//通过code获得openid
if (!isset($_GET['code'])){
//触发微信返回code码
//$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
$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 = $