Douyin ミニプログラム用の Alipay インターフェースをどのように記述しますか?

Douyin ミニプログラム用の Alipay インターフェースをどのように記述しますか?

DouyinとAlipayを接続するプロセス

まず、サーバー経由でDouyinから提供されるSP注文番号を取得します。

次に、SP 注文番号とその他のデータを Alipay に送信します。

次に、Alipay から返された情報を Douyin 側に渡し、支払いを接続します。

'alipay.class.php' をインクルードします。

'AopSdk.php' をインクルードします。

$risk_info=json_encode(配列('ip'=>$_SERVER['REMOTE_ADDR']));
$配列=配列(
'アプリID'=>'800117472149',
'メソッド'=>'tp.trade.create',
'文字セット'=>'utf-8'、
'sign_type'=>'MD5'、
'タイムスタンプ'=>time(),
'バージョン'=>'1.0',
'出荷番号'=>'20190727000',
'uid'=>'4ybyfXwNMulvUhBT',
'販売者ID'=>'1900011759',
'合計金額'=>100,
'通貨'=>'CNY'、
'件名'=>'販売者の注文名',
'body'=>'販売者の注文詳細',
'trade_time'=>時間(),
'有効時間'=>'20',
'notify_url'=>'https://www.juxunapp.com/',
'リスク情報'=>$リスク情報
);

$aplipay = 新しい alipay($array);

$res=$aplipay->pay();
app_id = isset($args['app_id']) ? $args['app_id'] : null;
$this->method = isset($args['method']) ? $args['method'] : null;
$this->charset = isset($args['charset']) ? $args['charset'] : null;
$this->sign_type = isset($args['sign_type']) ? $args['sign_type'] : null;
$this->timestamp = isset($args['timestamp']) ? $args['timestamp'] : null;
$this->version = isset($args['version']) ? $args['version'] : null;
$this->out_order_no = isset($args['out_order_no']) ? $args['out_order_no'] : null;
$this->uid = isset($args['uid']) ? $args['uid'] : null;
$this->merchant_id = isset($args['merchant_id']) ? $args['merchant_id'] : null;
$this->total_amount = isset($args['total_amount']) ? $args['total_amount'] : null;
$this->currency = isset($args['currency']) ? $args['currency'] : null;
$this->subject = isset($args['subject']) ? $args['subject'] : null;
$this->body = isset($args['body']) ? $args['body'] : null;
$this->trade_time = isset($args['trade_time']) ? $args['trade_time'] : null;
$this->valid_time = isset($args['valid_time']) ? $args['valid_time'] : null;
$this->notify_url = isset($args['notify_url']) ? $args['notify_url'] : null;
$this->risk_info = isset($args['risk_info']) ? $args['risk_info'] : null;
$biz_content = json_encode(配列(
'out_order_no'=>$this->out_order_no、
'uid'=>$this->uid、
'merchant_id'=>$this->merchant_id、
'total_amount'=>$this->total_amount、
'通貨'=>$this->通貨、
'subject'=>$this->件名、
'本文'=>$this->本文、
'trade_time'=>$this->trade_time、
'valid_time'=>$this->valid_time、
'notify_url'=>$this->notify_url、
'リスク情報'=>$this->リスク情報
));

$this->biz_content = $biz_content;

$sign['app_id'] = $this->app_id;
$sign['method'] = $this->method;
$sign['charset']=$this->charset;
$sign['sign_type']=$this->sign_type;
$sign['timestamp']=$this->timestamp;
$sign['version']=$this->version;
$sign['biz_content'] = $this->biz_content;

$this->sign = md5($this->getSignContent($sign,'utf-8','gx9j1saqpjkjgp024kzm6ypncfufruaxk76xk12b'));

}
パブリック関数pay() {
$url="https://tp-pay.snssdk.com/gateway";
$data=array('app_id'=>$this->app_id,'method'=>$this->method,'charset'=>$this->charset,'sign_type'=>$this->sign_type,'sign'=>$this->sign,'timestamp'=>$this->timestamp,'version'=>$this->version,'biz_content'=>$this->biz_content);
$res = json_decode($this->send_post($url,$data),true);
//ここでデータをフロントエンドに返し、フロントエンドからAlipayのレジを起動する必要があります

$ali_data=配列(
'本文'=>$this->本文、
'subject'=>$this->件名、
'本文'=>$this->本文、
'料金'=>$this->合計金額
);
$ali_data2=配列(
'trade_no'=>$res['response']['trade_no']
);

$config=配列(
'ali_app_app_id'=>'2019121069845600',
'ali_app_rsa_pri_key'=>'MIFEowIBAAKCAQEAxAfJcO3atT9LofwrDJuZP09nzUgNW5VKdZmSxHnXLqjzo+w2AIbBVmURTLtyDFAJAB19QZ2BXNtll2pb8rXonqQHZFi+5+cyB2/pLKRRNdaqGlQTbLShpbFhPrVNUFgg/zb2O5XiL1PXH3abNY45fVTiyseDJbIlGq1SeH12A5f5UZTA+/bsUTe2HLgupGltTNA3/OwBsw2u3zgr/aYjsj9mf029+HbzZtVMpJlQ2If80tcE9k8U75u+21H/ujDjKYThVbAKQPDSoUmLWlFPasExqRsKffIZdxbANNsKnXpJAP00NA0Nk06d3xmjfYdZiQtkpMo0myKF5JWUGRz7wwIDAQABAoIBAAFuySMhKesPNl9Nt4bVEE6tJuYSM77KnYu0fqUe+tqlc3psPIzOb1VRUcoMyK2cXCR7ErJLE2n5VInBxkBE4hleu4sZNvP89ZmmUL75yHorQn0ExkuSGmhanopVyuXebwdOgIg49TlBVJ4vQL0od/UZjLrMsIGzBqBmSecFi7pE+9AiGPIW3+AnZ1vzoTr5WwaXENzNj0uRWeXMg3vvxdBJm40pgsbgOrQzTtWgaRgWAjccMTPm4IfHj/FlWaa26BgR6EpjaQjSioOMOYUBEoKkgnFEHO1XCJSPjFNYo8sUgt8/wGMSXa5E2Yey2BY3fDvoSwAxsdki684nmog4A2kCgYEA4tyoVTI+2izwRKwRVqIwqtwswB6Q7OzC7dRcRUZwfoBRwN51S/CxTvBU9WujfjkgsCB5HFhgsfGAMfLzKNhpNdc/jbQtjlEoQAG/WmEM1AwllKs+0pt3ID+vo70YS3mIYIGKM2Lee4Fz0iaBLJGCW69EKGjX1wr1WI4kTG9N8acCgYEA3TVfSPL3sFKga+fW2ME9kdWZmzZQVvpShaN9r/YjErlz4RMvDvN1szKeyRg6YZbMJicxYeLVCWOaXNRwc3C2rVV6C1KSSqSnQd/QKvjzgWadK88RBnk3JDBi5XnqwW2JLqN1VeN8MplSFbdTorbNs+Md3WBzrdIJZnuinc3cEIUCgYAhDuKAt7es90tz1lcYdr38x+TFgi7AN6gYHA/uEFuoM262WjRhgotz41WeBbdnV0/KGpFLbh15EKYLoUmJtC9wpxMdxRm2WWEyIo8NzoKeC78WMPYQnpL3YhBoHdACf4098uJ+pnOhL7X+85lzMyj5z0pxUQXS0kf6RYxIjxeelQKBgBZmDRvp3kKwWyYR96NDDeTyZ/dbbI8iEbEOeO+UUMDYnm8v7hfpdwWKHqHmHiM7jbhfR5TNzxyARWUY7boCs7yhZxY2ajG8smLtMrrnMmDr7wY8lVC+fWLgs2LhEXA8kyNx0bO8sRq+g51HTuSu9e09Fg0QcyYqmmESK8kmyx2xAoGBANA3y+mVo6zKvwYNP/hsivcvQL4+P9lMlyT9J953lJdGUdj7rQI87mg8NamNrAhcfdg5HuXSDlfLhlnW9rT16pc2yCi3n5qZDCpydAmBB2MS91vteRvg05p17tzRIghxQuFSyl+djeEK1KtHcvMcblFL56G7YEAoBhRlkWeiVr0B',
'ali_app_pay_rsa_pub_key' => 'miiaijanbgkkhkig9w0baqefaaocaq8amiibcgkcaqaqaqaqaqafjco3att9lofwrdjuzp09nzugnwvvkdzzmsxhnxlqjzo onqqhzfi+5+cyb2/plkrrndaqglqtblshpbfhprvnufgg/zb2o5xil1pxh3abny45fvtiysedjbilgq1seh12a5f5uzta+/bsute2hlgupglgglgglggltna3/howb2umptnap JLQ2IF80TCE9K8U75U+21H/UJDJKYTHVBAKQPDSOUMLWLFPASEXQRSKFFFIZDXBANNSKNXPJAP00NA0NK06D3XMJFYDZIQTKPMO0MYKF5JWUUGRZ7WIDAQAB '
);

$ウェブサイト="https://www.juxunapp.com/";
$data2 = [];
$data2['trade_no'] = $res['response']['trade_no']; //取得したtrade_no注文番号
$data2['app_id'] = $this->app_id; // Toutiao Payment がビジネス パーティに割り当てた ID
$data2['sign_type'] = $this->sign_type; // Toutiao が使用する MD5
$data2['timestamp'] = (string)$this->timestamp; //リクエストが送信された時刻
$data2['merchant_id'] = $this->merchant_id; // Toutiao Payment がビジネス パーティに割り当てた Merchant ID
$data2['uid'] = $this->uid; // ユーザーの open_id を一意に識別します (これは Toutiao のものです)
$data2['total_amount'] = $this->total_amount; // 単位に分割された金額は整数として渡される必要があります
$data2['params'] = json_encode(['url' => $this->aliaapppaytest($ali_data , $biz_content , $ali_data2 , $website , $config)]); //Alipay APP支払いのリクエストパラメータは次のとおりです。ここではAlipay SDKを使用しました

$stringToBeSigned = $this->getSignContent($data2, $this->charset, 'gx9j1saqpjkjgp024kzm6ypncfufruaxk76xk12b'); //上記のパラメータに再度署名します
$data2["sign"] = md5($stringToBeSigned);

$data2['pay_channel'] = "ALIPAY_NO_SIGN";
$data2["pay_type"] = "ALIPAY_APP";
$data2['method'] = 'tp.trade.confirm';
$data2['risk_info'] = $this->risk_info;
return ['error'=>0 , 'msg'=>'success' , 'data'=>$data2]; // これらのパラメータをフロントエンドに返して処理します

// $res を返します。
//json_encode($this->alipayData($res)) を返します。
}

パブリック関数 aliaapppaytest($data、$biz_content、$data2、$website、$config){
'AopSdk.php' が必要です。
$aop = 新しい \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = $config['ali_app_app_id']; //AlipayアプリID
$aop->rsaPrivateKey = $config['ali_app_rsa_pri_key']; //Alipay秘密鍵
$aop->フォーマット = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = $config['ali_app_pay_rsa_pub_key']; //Alipay公開鍵

//特定の API に対応するリクエスト クラスをインスタンス化します。クラス名はインターフェイス名に対応します。現在の呼び出しインターフェイス名は alipay.trade.app.pay です。
$request = new AlipayTradeAppPayRequest(); //SDK はパブリック パラメータをカプセル化しているので、ここではビジネス パラメータのみを渡す必要があります。
$data2 = [
'本文' => $data['本文'],
'件名' => $data['件名'],
'out_trade_no' => $data2['trade_no'],
'timeout_express' => '30分'、
'total_amount' => $data['fee']/1000,
'製品コード' => 'QUICK_MSECURITY_PAY',
];
$postdata = json_encode($data2);
$request->setNotifyUrl($website . '/payment/toutiao/notify.php'); // サーバー非同期通知の http アドレス);
$request->setBizContent($postdata);
//$response = $aop->sdkExecute($request); //これはsdkExecuteを使用する通常のインターフェース呼び出しとは異なります

$response = $aop->sdkExecute($request);

//htmlspecialchars は、ページに出力するときにブラウザがキー パラメータ HTML をエスケープするのを防ぐために使用されます。この問題は、ログに出力する場合や HTTP 経由で送信する場合は発生しません。
// return htmlspecialchars($str); // orderString は、それ以上処理せずにクライアントに直接リクエストできます。
return $response; //OrderString は、それ以上処理せずにクライアント要求に直接送信できます。
}

パブリック関数alipayData($res){

$biz_content=json_encode(配列(
'subject'=>$this->件名、
'out_trade_no'=>$this->out_order_no、
'total_amount'=>$this->total_amount、
'製品コード'=>"QUICK_MSECURITY_PAY"

));

$url=配列(
'app_id'=>$this->app_id、
'biz_content'=>$biz_content,
'charset'=>$this->charset、
'メソッド'=>'alipay.trade.app.pay',
'notify_url'=>$this->notify_url、
'sign'=>$res['sign'],
'sign_type'=>'RSA2'、
'タイムスタンプ'=>time(),
'version'=>$this->バージョン
);

$url = $this->getSignContent($url,'utf-8','');

$データ=配列(
'app_id'=>$this->app_id、
'sign_type'=>'MD5'、
'timestamp'=>(文字列)$this->timestamp,
'trade_no'=>$res['response']['trade_no'],
'販売者ID'=>'1900011747',
'uid'=>'4ybyfXwNMulvUhBT',
'合計金額'=>100,
'params'=>json_encode(配列('url'=>$url))、
'sign'=>$this->sign、
'メソッド'=>'tp.trade.confirm',
'pay_channel'=>'ALIPAY_NO_SIGN'、
'支払いタイプ'=>'ALIPAY_APP',
'リスク情報' => $this->リスク情報
);

$data を返します。
}

パブリック関数 getSignContent($params, $charset,$app_secret) {
$params をソートします。
署名する文字列 = "";
$i = 0;
foreach ($params を $k => $v として) {
if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {
// ターゲット文字セットに変換する
$v = $this->characet($v, $charset);
($i == 0)の場合{
$stringToBeSigned .= "$k" . "=" . "$v";
} それ以外 {
$stringToBeSigned .= "&" . "$k" . "=" . "$v";
}
$i++;
}
}
署名する文字列 = $文字列.$app_secret;

設定解除 ($k, $v);
$stringToBeSigned を返します。
}
パブリック関数 checkEmpty($value) {
if (!isset($value))
true を返します。
($値 === null)の場合
true を返します。
if (trim($value) === "")
true を返します。
false を返します。
}

パブリック関数characet($data, $targetCharset) {
もし(!空($data)) {
$fileType = "UTF-8";
strcasecmp($fileType, $targetCharset) != 0 の場合
$data = mb_convert_encoding($data、$targetCharset、$fileType);
}
}
$data を返します。
}

パブリック関数 send_post($url, $post_data) {
$postdata = http_build_query($post_data);
$オプション = 配列(
'http' => 配列(
'メソッド' => 'POST'、
'ヘッダー' => 'コンテンツタイプ:application/x-www-form-urlencoded',
'コンテンツ' => $postdata,
'timeout' => 15 * 60 // タイムアウト(単位:秒)

);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$result を返します。

}

}

?>

ページ({
データ: {}、
onLoad: 関数 () {

},
支払う: 関数 () {
tt.request({
url: 'https://www.juxunapp.com/alipay2/aop/test/index.php', // ターゲット サーバーの URL
成功: 関数 (res) {
コンソールログ(res.data.data)
tt.requestPayment({
データ:res.data.data、
成功(res) {
コンソールログ(res);
},
失敗(res) {
コンソールログ(res);
}
})
}
});

}
});

<<:  ASO を適用する際に注意すべき 4 つのよくある間違いは何ですか?

>>:  限られた予算で最高の広告効果を得るための 8 つのヒント!

推薦する

あなたの潜在能力を解き放ちましょう

思考の可能性を刺激するリソースの紹介:コースカタログ01. 思考の認知.mp4 01. 思考の認知....

露出を高める正しい方法を学びましょう!

皆さん、自分の広告がなぜ表示されないのかと心配している人も多いと思います。なぜ広告にお金をかけられな...

この流行はすべての人の賃金に影響を与えるでしょうか?在宅勤務の給与はどうやって計算するのですか?添付は人材資源社会保障省からの回答です。

感染状況は好転しつつあり、感染者数は継続的に減少し、退院者数も継続的に増加しており、多くの企業や部署...

厳選した不動産広告スローガン集

編集部が厳選した不動産広告のキャッチコピーをまとめてみました。いいなと思ったらぜひ集めてみてください...

長沙で小規模な引越しプログラムを開発するにはどれくらいの費用がかかりますか?

業界関係者によると、今後2年間でミニプログラムがAPP市場の80%を置き換えることになるという。多く...

JD.com 電子商取引オペレーショントラフィックロジック

1. トラフィックロジックのトップレベル構造1. 正確な配布:オンデマンドでカスタマイズトラフィック...

入札プロモーションの結果がどんどん悪くなっているのはなぜですか?

質問: 私は病院のオンライン マーケティング マネージャーです。オンライン マーケティングは現在非常...

アプリの新バージョンがリリースされました。これらの操作は完了しましたか?

このアプリはリリースされたばかりなので、当然ながら多くの問題があり、継続的に最適化とアップグレードを...

情報フロー広告アルゴリズムの仕組み:業界全体に1つの公式が適用されます!

最近、クラスメイトのシャオ・アがチングアジュンに報告しました。 「220元以上提供したけど、まだバレ...

金川先生 - 巨大な銭川オンラインコミュニティ、プロの銭川が999元の実践コースを構築して開始する計画

金川先生 - 巨大な千川オンラインコミュニティ、プロの千川が999元の実践コースを構築して開始する予...

情報フロー広告で遊ぶには?クリック率の向上が露出を増やす鍵

ネイティブ広告の重要な部分として、情報フロー広告はマーケティング担当者にとっての戦場となっています。...

Baidu ビデオを使用して受動的にトラフィックを引き付ける方法!

1. ブランドワードのレイアウトビデオを使用してトラフィックを引き寄せる前に、まず 1 つのことを...

シンプルで粗雑だが、拡張可能な6つの小さな金儲けプロジェクトを共有します。これを読んだ後、初心者はすぐに実践を開始できます

今日は、副業として仮想商品を販売してお金を稼ぐ6つの方法を紹介します。うまくいけば、月に数万元を稼ぐ...

蘭州WeChatミニプログラムモールランキング、ミニプログラムのランキングに影響を与える要因は何ですか?

携帯電話のアプリを開くと、どの電子商取引ミニプログラムであっても、基本的にはすべて独自の特徴がありま...

ユーザー操作 | ユーザー操作の一般的なパターンの分析

インターネット時代では、ユーザーを獲得したものが世界を勝ち取ります。ユーザーは企業の資源であり、基盤...