微信支付,开发过的小朋友都踩过坑,在此附上jsapi源码,希望帮到小伙伴们。
1、支付授权目录设置
2、公众平台,用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。
3、商户平台API秘钥
4、PHP代码
控制器:
<?php
namespace app\wxpay\controller;
class JsapiController
{
public $mchid = '00000000'; //微信支付商户号 PartnerID 通过微信支付商户资料审核后邮件发送
public $appid = '00000000'; //微信支付申请对应的公众号的APPID
public $appKey = '00000000'; //微信支付申请对应的公众号的AppSecret
public $apiKey = '00000000'; //https://pay.weixin.qq.com 商户平台API秘钥
public function jspay()
{
$openId = $this->GetOpenid(); //获取openid
if(!$openId) exit('获取openid失败');
$outTradeNo=time().rand(10000,99999);
$payAmount=0.01;
$orderName = 'test-test';
$notifyUrl = 'http://www.test.net/wxpay/notify/index'; //付款成功后的回调地址(不要有问号)
$payTime = time();
$jsApiParameters = $this->createJsBizPackage($openId,$payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime);
$jsApiParameters = json_encode($jsApiParameters);
$this->assign('jsApiParameters',$jsApiParameters);
$this->assign('payAmount',$payAmount);
return $this->fetch('jspay');
}
/**
* 通过跳转获取用户的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://www.test.net/wxpay/jsapi/jspay');
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header("Location: $url");
exit();
} else {
//获取code码,以获取openid
$code = $_GET['code'];
$openid = $this->getOpenidFromMp($code);
return $openid;
}
}
/**
* 通过code从工作平台获取openid机器access_token
* @param string $code 微信跳转回来带上的code
* @return openid
*/
public function GetOpenidFromMp($code)
{
$url = $this->__CreateOauthUrlForOpenid($code);
$res = self::curlGet($url);
//取出openid
$data = json_decode($res,true);
$this->data = $data;