技术要点(具体开发代码,在(公正年报H5)中实现
1、申请好公众号,获取AppID(公众号ID)AppSecret(公众号密钥)
2、申请微信支付账户,获取(商户号)和(密钥)
3、在微信支付账户中绑定公众号,然后在公众号中同意授权绑定,使两者产生关联
代码实现
一、h5页面,调用方法获取code
public function getGzhCode()
{
$appid = 'xxx';//公众号appid
$redirect_uri = urlencode('https://abcd/me'); // 用户同意授权后,能够跳转的回调链接地址
// 获取code
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
header('Location: ' . $url);
exit();
}
二、在上面设置的回调页面me中(通过code获取access_token和openId),这个openId就是用户在公众号中的身份ID,支付的时候通过这个ID来实现
if (isset($_GET['code'])) {
$appid = 'xxx';//公众号appid
$appsecret = 'xxx';//公众号secret
$code = $_GET['code'];//获取回调传过来的code,通过code再获取token以及openId
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$data = json_decode($result, true);
$openId = $data['openid']; // 用户的openid
Session::set('openId',$openId);//保存openid到session中
//判断用户是否已存在,不存在则先保存新用户记录
$userData = GznbUserModel::where('openId',$openId)->find();
if(empty($userData)){
$save['openId'] = $openId;
GznbUserModel::create($save);
$userData = GznbUserModel::where('openId',$openId)->find();
}
$this->assign('userData',$userData);
return $this->view->fetch();
}
至此,已经完成了获取用户openId和保存记录,用户下次登录或支付时,通过这个openId来锁定身份
三、微信公众号-JSAPI支付实现
1、生成微信公众号-JSAPI支付参数,传递给H5页面做为config
public function form()
{
if(request()->isPost()){
//支付页面,提交订单,保存订单记录
$openId = Session::get('openId');
$status = 0;
$trade_no = '';
if($openId){
$data = $this->request->param();
$userData = GznbUserModel::where('openId',$openId)->find();
if($userData){
$data['userId'] = $userData['id'];
$data['orderNumber'] = $this->getOrderNumber();
//生成随机订单号,和回调时对应
$data['trade_no'] = $data['orderNumber'];
$res = GznbOrderModel::create($data);
if($res){
$trade_no = $dat

最低0.47元/天 解锁文章
1982

被折叠的 条评论
为什么被折叠?



