php之微信公众号内支付~

1、前往微信公众平台申请:微信公众号的appId、secret
2、前往微信商户平台申请:微信商户的商户id、支付key
3、下载微信提供的SDK:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
      下载微信商户平台的API安全证书:https://pay.weixin.qq.com/index.php/core/cert/api_cert
4、进入微信公众平台,在微信公众号设置—>功能设置 里面设置微信JS接口安全域名、网页授权域名
php之微信公众号内支付~_第1张图片
5、进入微信商户平台,进入进入产品中心—>开发配置,设置支付授权目录
php之微信公众号内支付~_第2张图片
6、进入微信商户平台,进入产品中心—>APP授权管理,点击新增授权申请单
php之微信公众号内支付~_第3张图片
7、配置完成上代码!:
      首先获取用户授权:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
     类似代码:

	function wxpayurl(){
		$urlObj["appid"] = '';
        $urlObj["redirect_uri"] = '';//如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
        $urlObj["response_type"] = "code";
        $urlObj["scope"] = "snsapi_base";
        $urlObj["state"] = "#wechat_redirect";//网页参数 例如“uid1_mony10#wechat_redirect”   重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
        $bizString = http_build_query($urlObj);
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
        Header("Location: $url");
     }

以上代码是在用户下单页面(不是支付页面)点击下单时跳转至wxpayurl方法跳转至微信页再由微信返回回调页面并携带code参数以及state参数,接下来获取code换取openid:

		function (){
			$code=I('code');
			$state=I('state');
            $input_data=$this->paySubstrDate($state);//将“uid1_mony10#wechat_redirect”分割,用户购买东西以及用户id
            $urlObj['appid'] = ‘’;//appid
	        $urlObj['secret'] = '';//微信公众号app_secret
	        $urlObj['code'] = $code;
	        $urlObj['grant_type'] = 'authorization_code';
	        $queryStr = http_build_query($urlObj);
	        $url='https://api.weixin.qq.com/sns/oauth2/access_token?' . $queryStr;
	        $res=file_get_contents($url);
	        $data = json_decode($res, true);
	        //拿到openid,拼接支付参数
	        $wechatJsApiPay = new \wechatJsApiPay($this->conf);
	        $params['out_trade_no'] = ‘’;//订单号
	        $params['body'] = ‘’;//商品描述
	        $params['total_fee'] = ‘’; // 单位为分,不是元,也不是角
	        $params['trade_type'] = 'JSAPI';
	        $params['openid'] = $data['openid'];
	        $params['attach'] = ‘’;//支付显示内容
	        $params['spbill_create_ip'] = $_SERVER['REMOTE_ADDR'];
	        $result = $wechatJsApiPay->unifiedOrderJs($params);
	        $data = $wechatJsApiPay->getAppPayParams($result['prepay_id']);
	        //签名
	        $data2['appId']=$data['appid'];
            $data2['nonceStr']=$data['noncestr'];
            $data2['signType']="MD5";
            $data2['package']="prepay_id=".$data['prepayid'];
            $data2['timeStamp']=$data['timestamp'];
            $wechatJsApiPay = new \wechatJsApiPay($this->conf);
            $data['sign2']=$wechatJsApiPay->MakeSign($data2);
            //将数据传输到前端确认支付页面换起微信js支付插件
            $this->assign('_data', $data);
        	$this->display();
		}

前端确认支付页面加入微信支付js代码 当用户点击确认支付时触发


8、异步处理 验签 处理数据库逻辑

		$wechatJsApiPay = new \wechatJsApiPay($this->conf);
		$data = $wechatJsApiPay->getNotifyData();
		$flag = $wechatJsApiPay->rsaCheckNotifySign($data);
		if($flag){
		$data
			//处理数据库
		}else{
			//验签失败
		}

你可能感兴趣的:(微信公众号支付)