中国农业银行 云 BMP 二维码支付商户接入

接口文档地址:公众号 霖深时见露

输入关键字,农行

<?php
/**
 * Created by PhpStorm.
 * User: 海峡
 * Date: 2020/9/15
 * Time: 10:19
 */
//include_once 'rsa.php';
    $data = [];
    $data['mch_id'] = '921010000000000';
    $data['out_trade_no'] = '20200915123456';
    $data['total_fee'] = '1';
    $data['nonce_str']=md5(time());
    $data['body'] = '测试商品';
    $private_key_path='';
    $public_key='';
    $signData = rsa2($data,$private_key_path);
    $data['sign'] = $signData;

    $url='https://pay.echase.cn/abcpay/gateway/jspay';

    $res = httpRequest($url,$data);

     function httpRequest($url,$data)
    {
        $data = json_encode($data);
        $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        var_dump($output);
        curl_close($ch);

    }

/**
 * 加密
 * RSA签名
 * @param $data 待签名数据
 * @param $private_key_path 商户私钥文件路径
 * return 签名结果
 */
    function rsa2($data,$pikey){
         //将请求的参数进行排序
         ksort($data);//ksort()函数 根据参数的键进行升序排序
         reset($data);
         $signStr = '';
         foreach ($data as $key => $value) {
                         if ($key == 'sign' || $value == '') continue;
             $signStr .= $key .'=' .$value .'&';
         }
         $signStr = substr($signStr, 0, -1);
         $pikey_res = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($pikey, 64, "\n", true) . "\n-----END RSA PRIVATE KEY-----";
         $pi_key =  openssl_pkey_get_private($pikey_res);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
        if(!$pi_key) return'私钥有误';
        openssl_sign($signStr,$sign,$pi_key,OPENSSL_ALGO_SHA256 );//私钥签名
            //openssl_private_encrypt 加密数据
                //openssl_sign 签名
             //签名在什么场景下使用?作用是什么?

//配合一个 key 防止串改。

//单纯验证数据。(但是不需要知道原数据)

//核心是散列算法,即你可以从 A 得到一个 B ,但是几乎不可能从 B 逆向得到 A 。

//比如 "hello" 的 MD5 值是:5d41402abc4b2a76b9719d911017c592 。

//再比如我给你一个 MD5 值 a2891da3bb01b6b8406521b844ba1a20 ,这是 B ,你几乎不可能算出它是
//哪个字符中的 MD5 值。
        $sign = base64_encode($sign);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的

        return $sign;

}
/**
 * 解密
 * RSA签名
 * @param $data 待签名数据
 * @param $private_key_path 商户私钥文件路径
 * return 签名结果
 */
function RsaDecrypt($str,$public_key){
    $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
    if(!$pu_key) return '公钥有误';
    openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
    return $decrypted;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值