PHP接入 paytm的支付 和转账

支付

这是成功吊起后的支付页面,
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201130105315936.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDc2OTUyOQ==,size_16,color_FFFFFF,t_70#pic_center
这种就是需要你FQ了,你的网络不允许访问,这个要注意哦。
在这里插入图片描述

直接上代码
SDK下载
支付文档

public function paytm(){
        require_once("PaytmChecksum.php");//只需要这一个文件引入,在文档可以下载
        $orderId = request()->request('orderId');
        $amount = request()->request('amount');
        $custId = request()->request('custId');
        $mobileNo = request()->request('mobileNo');
        $email = request()->request('email');
        $paytmParams = array();
        $mid = "your mid ID";
        $key ="your key";
        $paytmParams["body"] = array(
            "requestType"  => "Payment",
            "mid"   => $mid,
            "websiteName"  => "DEFAULT",
            "orderId"    =>$orderId,
            "callbackUrl"  => "http://".$_SERVER['HTTP_HOST']."/pay/quick/paytm_back",
            "txnAmount"   => array(
                "value"   => $amount.".00",
                "currency" => "INR",
            ),
            "userInfo" => array(
	            "custId" => 'DG',
	            "mobile"=>$mobileNo,
            ),
        );
        /*
        * Generate checksum by parameters we have in body
        * Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys
        */
        $checksum = PaytmChecksum::generateSignature(json_encode($paytmParams["body"], JSON_UNESCAPED_SLASHES), $key);
        
        $paytmParams["head"] = array(
        "signature"=> $checksum
        );
        $post_data = json_encode($paytmParams, JSON_UNESCAPED_SLASHES);
        /* for Staging */
        //$url = "https://securegw-stage.paytm.in/theia/api/v1/initiateTransaction?mid=".$mid."&orderId=".$orderId;//测试环境的URL
        /* for Production */
        //https://securegw.paytm.in/theia/api/v1/initiateTransaction?mid={mid}&orderId={order-id}
         $url = "https://securegw.paytm.in/theia/api/v1/initiateTransaction?mid=".$mid."&orderId=".$orderId;//正式环境的URL
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
        $response = curl_exec($ch);
        $response = json_decode($response,true);
        //dump($response);exit;
        $txnToken = $response['body']['txnToken'];
        $txt = "mid=".$mid."&orderId=".$orderId."&txnToken=".$txnToken;
        $token = $this->lock_url($txt);//这里我做了一个加密。,可以省略这一步
        $urls = "http://".$_SERVER['HTTP_HOST']."/pay/quick/paytmtwo?token=".$token;
        //dump($urls);exit;
        //return $urls;
        header("Location:".$urls);exit;
  }
  //回调
  public function paytm_back(){
	require_once("PaytmChecksum.php");
        $key ="your key";
        $paytmParams = $_POST;
 	    $paytmChecksum = $_POST['CHECKSUMHASH']; //秘钥
		$orderId = $_POST['ORDERID'];//订单id
		$stauts = $_POST['STATUS'];//订单状态        //TXN_SUCCESS    //TXN_FAILURE  //PENDING
		$RESPCODE = $_POST['RESPCODE'];//状态码
		if($stauts == 'TXN_SUCCESS'){       //1,-1,5是我的业务逻辑的值,可以改变
		    $status ='1';//成功
		}
		if($stauts == 'TXN_FAILURE'){
		    $status ='-1';//失败
		}
		if($stauts == 'PENDING'){
		    $status ='5';//排队
		}
        unset($paytmParams['paytmChecksum']);
        /**
        * Verify checksum
        * Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys 
        */
        $isVerifySignature = PaytmChecksum::verifySignature($paytmParams, $key, $paytmChecksum);
		if($isVerifySignature) {

					//验证成功的业务逻辑

		}


}
  

转账

paytm的转账分电子钱包的转账和银行卡转账,我这接的电子钱包的转账
转账文档

	public function paytmcash(){
        require_once("PaytmChecksum.php");

        $paytmParams = array();
        //出款账户的子账户,需要在paytm的后台给出款的权限
        $paytmParams["subwalletGuid"]      = "012634d-85214-4908-a107-2****";
        $paytmParams["orderId"]            = '123131321';//订单ID
        $paytmParams["beneficiaryPhoneNo"] = '666666';//电话
        $paytmParams["amount"]             =100;//金额
        $paytmParams["callbackUrl"]             = "http://".$_SERVER['HTTP_HOST']."/pay/takecash/paytm_back";//回调地址
        
        $post_data = json_encode($paytmParams, JSON_UNESCAPED_SLASHES);
        
        /*
        * Generate checksum by parameters we have in body
        * Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys 
        */
        $checksum = PaytmChecksum::generateSignature($post_data, "#");//YOUR_MERCHANT_KEY
        
        $x_mid      = "#";//YOUR_MID_HERE
        $x_checksum = $checksum;
        
        /* for Staging *///测试URL
        //$url = "https://staging-dashboard.paytm.com/bpay/api/v1/disburse/order/wallet/food";
        
        /* for Production *///正式URL
        $url = "https://dashboard.paytm.com/bpay/api/v1/disburse/order/wallet/gratification";
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "x-mid: " . $x_mid, "x-checksum: " . $x_checksum)); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        $response = curl_exec($ch);
        $response = json_decode($response,true);

    }
    //paytm转账回调
    public function paytm_back(){
    //回调的参数 和获取订单状态的接口返回的一样
    // 	$POST = '{"status":"SUCCESS","statusCode":"DE_001","statusMessage":"Successful disbursal to Wallet is done","result":{"mid":"PCENTE16235332048181","orderId":"1604030836","paytmOrderId":"202010300937166929359223","amount":"1.00","commissionAmount":"0.02","tax":"0.00","rrn":null,"beneficiaryName":null,"isCachedData":null,"cachedTime":null,"reversalReason":null}}';
    	$POST = file_get_contents('php://input');
		$POST = json_decode($POST,true);

		$orderId = $POST['result']['orderId'];
		$status = $POST['status'];
		if($status == 'SUCCESS'){
			$status = 1;
		}
		if($status == 'FAILURE'){
			$status = -1;
		}
		//paytm的转账回调没有秘钥验证,有点不安全,回调过来的信息和获取订单状态返回的信息是一样的,可以去获取订单信息来完成订单回调
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值