支付宝app支付RSA2签名放在服务端php的编写方式

使用支付宝开放平台进行app支付的时候,RSA2签名放在服务端php的编写方式

使用支付宝开放平台进行app支付的时候,RSA2签名放在服务端php的编写方式

大家都知道,支付宝的支付sdk demo是将签名放在app端进行的,这是不安全的,应该放到服务端进行签名,但是支付宝提供的demo中并没有,我对此进行了修改,让其支持服务端签名

今天以安卓为例对官方demo进行修改,后端以php为例进行修改

final String orderInfo = getSigndatafromhttp();

final Runnable payRunnable = new Runnable() {

    @Override
    public void run() {
        PayTask alipay = new PayTask(PayDemoActivity.this);
        //orderino要从服务端获取
        Map < String, String > result = alipay.payV2(orderInfo, true);
        Log.i("msp", result.toString());

        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage(msg);
    }
};

// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
//请求处理,输出结果-response.body().show();

此处的orderInfo从通过http从服务器上获取,此处是通过getSigndatafromhttp

php后端的签名如下

require_once dirname(__FILE__).DS."AopSdk.php";
$c = new\ AopClient();
$request = new\ AlipayTradeAppPayRequest();
$content['subject'] = $subject; //商品的标题/交易标题/订单标题/订单关键字等。
$content['out_trade_no'] = $out_trade_no; //商户网站唯一订单号
// $content['timeout_express'] = "30m";//该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。注:若为空,则默认为15d。
$content['total_amount'] = $total_fee; //    订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000],
$content['product_code'] = "QUICK_MSECURITY_PAY"; //    销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
// $content['goods_type'] = "0";//    商品主类型:0—虚拟类商品,1—实物类商品注:虚拟类商品不支持使用花呗渠道  非必填参数
$con = json_encode($content); //$content是biz_content的值,将之转化成字符串

$param = array();
$param['app_id'] = $c - > appId; //支付宝分配给开发者的应用ID
$param['method'] = 'alipay.trade.app.pay'; //接口名称
$param['charset'] = 'utf-8'; //请求使用的编码格式
$param['sign_type'] = 'RSA2'; //商户生成签名字符串所使用的签名算法类型
$param['timestamp'] = date("Y-m-d H:i:s"); //发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"
$param['version'] = '1.0'; //调用的接口版本,固定为:1.0
$param['notify_url'] = $this - > _notify_url; //支付宝服务器主动通知地址
$param['biz_content'] = $con; //业务请求参数的集合,长度不限,json格式
//生成签名
$paramStr = $c - > getSignContent($param);
$sign = $c - > alonersaSign($paramStr, $c - > rsaPrivateKey, 'RSA2');
$param['sign'] = $sign;
$str = $c - > getSignContentUrlencode($param);
return $str;

ok,这就解决了

{{collectdata}}

网友评论0