前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【黄啊码】微信小程序支付学不会,照抄总会吧!

【黄啊码】微信小程序支付学不会,照抄总会吧!

作者头像
黄啊码
发布2021-09-26 10:43:14
4730
发布2021-09-26 10:43:14
举报
文章被收录于专栏:黄啊码【CSDN同名】

为了方便,我直接在example文件夹中找到WxPay.Config分别设置了,打码的部分自行补充

代码语言:javascript
复制
备用参数:订单参数$order,openid $openId
$tools = new JsApiPay();
		
//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody("XXX");
$input->SetAttach("test");
$input->SetOut_trade_no("sdkphp".date("YmdHis"));
$input->SetTotal_fee(intval($order['order_amount']*100));
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("https://xcx.XXX.com/xcx/XXX");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$config = new WxPayConfig();
$fiedorder = WxPayApi::unifiedOrder($config, $input);
//网页版的支付继续走下边
$jsApiParameters =  $tools->GetJsApiParameters($fiedorder);
return $jsApiParameters;

小程序代码:

代码语言:javascript
复制
wx.requestPayment({
        'timeStamp': res.data.timeStamp,
        'nonceStr': res.data.nonceStr,
        'package': res.data.package,
        'signType': res.data.signType,
        'paySign': res.data.paySign,
        'success': function(res1) {
            console.log(res1);
            
        },
        'fail': function(res1) {
          console.log(res1);
        },
        'complete': function(res1) {
            //console.log('接口调用结束的回调函数(调用成功、失败都会执行)');
        }
      })

回调函数:

代码语言:javascript
复制
public function order_success(){
        $xml=file_get_contents("php://input");
        $fp = fopen('./writeTpLog.txt', 'a+b');
        fwrite($fp, $xml);
        fclose($fp);
        //开启调试
        define('WXDEBUG', true);
        // 将服务器返回的XML数据转化为数组
        $data = $this->fromXml($xml);
        // 保存微信服务器返回的签名sign
        $dataSign = $data['sign'];
        // sign不参与签名算法
        unset($data['sign']);
        // 生成签名
        $sign = $this->MakeSign($data);//记得在函数中把key填上!!!别只会抄
        $wx_total_fee = $data['total_fee'];
        //将获取的参数写入文件,测试是否毁回调成功
        $fp = fopen('./writeTpLog.txt', 'a+b');
        fwrite($fp, $dataSign."<br/>3333ss<br/><br/><br/><br/><br/><br/>".$sign."<br/>sfsdfsdf885<br/><br/><br/><br/><br/><br/>"."\n\n\n\n\n\n\n\n".$data['return_code']."\n\n\n\n\n\n".$data['total_fee']."\n\n\n\n\n\n");
        fclose($fp);
        // 判断签名是否正确  判断支付状态
        if (($sign === $dataSign) && ($data['return_code'] == 'SUCCESS') && ($data['result_code'] == 'SUCCESS')) {
            $fp = fopen('./writeTpLog.txt', 'a+b');
            fwrite($fp, "支付成功");
            fclose($fp);
        }
    }
 /**
	 * 生成签名
	 * @param WxPayConfigInterface $config  配置对象
	 * @param bool $needSignType  是否需要补signtype
	 * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
	 */
	public function MakeSign($data)
	{
		//签名步骤一:按字典序排序参数
		ksort($data);
		$string = $this->toUrlParams($data);
		//签名步骤二:在string后加入KEY
		$string = $string . "&key=XXXX";
		//签名步骤三:MD5加密或者HMAC-SHA256  自己的签名使用的是sha256
		$string = hash_hmac("sha256",$string ,"XXXX");
		
		//签名步骤四:所有字符转为大写
		$result = strtoupper($string);
		return $result;
	}
	
    /**
     * 将xml转为array
     * @param string $xml
     * @throws WxPayException
     */
	public function FromXml($xml)
	{	
		if(!$xml){
			throw new WxPayException("xml数据异常!");
		}
        //将XML转为array
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
		return $this->values;
	}
    /**
     * 格式化参数格式化成url参数
     * @param $values
     * @return string
     */
    public function toUrlParams($values)
    {
        $buff = '';
        foreach ($values as $k => $v) {
            if ($k != 'sign' && $v != '' && !is_array($v)) {
                $buff .= $k . '=' . $v . '&';
            }
        }
        return trim($buff, '&');
    }

    /*
     * 给微信发送确认订单金额和签名正确,SUCCESS信息 -xzz0521
     */
    private function return_success(){
        $return['return_code'] = 'SUCCESS';
        $return['return_msg'] = 'OK';
        $xml_post = '<xml>
                    <return_code>'.$return['return_code'].'</return_code>
                    <return_msg>'.$return['return_msg'].'</return_msg>
                    </xml>';
        echo $xml_post;exit;
    }

这是最终的结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档